C语言 ——— 指针和字符数组的相关笔试题和解析(上篇)

目录

字符数组和指针的笔试题(sizeof篇)

字符数组和指针的笔试题(strlen篇)


字符数组和指针的笔试题(sizeof篇)

1.

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr));

首先要清楚的是 arr这个数组,只存放了 'a', 'b', 'c', 'd', 'e', 'f' 这几个字符,没有存放其他东西,也没有隐藏的'\0',且 sizeof(数组名) 计算的是整个数组的大小,arr数组一共有6个元素,每个元素是1个字节的大小,所以 sizeof(arr) = 6*1 = 6字节

所以结果是 6字节

2. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr + 0));

数组名没有单独放在sizeof内部,所以计算的不是整个数组的大小,此处的arr表示的是首元素的地址,那么arr+0还是首元素的地址,只要是地址,那么sizeof(地址)的大小就是 4/8字节

所以结果是 4/8字节

3.

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(*arr));

同样数组名没有单独放在sizeof内部,那么此时的arr是首元素地址,*arr 表示的是对arr解引用,得到的就是首元素 'a' ,且 'a' 是char类型,大小是1个字节

所以结果是 1字节

4. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(arr[1]));

arr[1] 是第二个元素,也就是 'b' ,所以结果是 1字节

5. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(&arr));

&arr 表示的是取出整个数组的地址,虽然是取出整个数组的地址,但还是地址,而且也不是数组名单独放在 sizeof内部的,所以大小为 4/8字节

所以结果是 4/8字节

6.

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(&arr + 1));

整个数组的地址+1,跳过的是自身大小的1,也就是跳过整个数组,指向数组最后一个元素的下一次位置的地址,但只要是地址……

所以结果是 4/8字节

7. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", sizeof(&arr[0] + 1));

 &arr[0] 取出的是首元素的首地址,+1后指向的是第二个元素的首地址,所以只要是地址……

所以结果是 4/8字节


字符数组和指针的笔试题(strlen篇)

1. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", strlen(arr));

须知:strlen是库函数,作用是求字符串长度的,统计的是字符串中在'\0'之前的字符个数

且当前题目中的arr数组只是存放了 'a', 'b', 'c', 'd', 'e', 'f' 这几个字符没有隐藏的'\0',所以strlen在求字符串长度时,strlen会从字符'a'一直往后找,直到识别到'\0‘才结束,我们并不知道在什么时候会识别到'\0',所以是随机值

所以结果是 随机值

2. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", strlen(arr + 0));

arr数组名在strlen中没有整个数组的概念,arr + 0还是首元素地址,所以结果和第一题一样

所以结果是 随机值

3. 

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", strlen(*arr));

须知:strlen函数参数部分是 const char* str ,需要传递一个地址,才能正常统计和访问

arr是数组首元素地址,*arr 表示的是对首元素地址解引用,那么访问的就是字符 'a' ,字符'a'的ASCII码值是79,strlen就会从97这个地址开始统计字符串长度,这就非法访问内存了

所以结果是 程序崩溃 

4.

char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
printf("%d\n", strlen(&arr));

&arr 的类型是 char(*)[6],是数组指针,但是strlen需要的是 const char* 类型的指针,虽然类型不匹配,但是 &arr 传递时 strlen会当作 arr的地址

所以结果是 随机值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内本地化OCSP服务的SSL证书:提升安全与效率的新选择

在数字化时代,网络安全成为企业运营和用户体验的重要基石。HTTPS(Hypertext Transfer Protocol Secure)作为一种安全的网络协议,通过SSL(Secure Sockets Layer)加密技术,保障了数据传输的机密性…

Windows 端口占用 Port 端口占用 如何发现端口占用并且强杀?

应用场景 场景 有时候本地测试,经常发现端口占用。 如何找到端口占用,并且 kill 掉呢? 端口占用情况 lsof -i:XXX查看 sudo netstat -apn | grep XXX查看 ps -aux | grep XXX详细信息 ps -ef | grep XXX根据分类条件查询信息 发现并…

MATLAB基础应用精讲-【数模应用】Poisson 回归分析(附R语言代码实现)

目录 前言 知识储备 基于泊松回归、负二项回归模型 数据分布介绍 模型介绍 模型的选择 案例介绍 算法原理 泊松回归 数学模型 适用条件 参数估计与假设检验 SPSSAU Poisson 回归案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解…

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

OpenSSL SSL_connect: Connection was reset in connection to github.com:443 目录 OpenSSL SSL_connect: Connection was reset in connection to github.com:443 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

kuberneter管理GUI工具Lens

从github上可以知道,lens的前端是用electron做的客户端工具,打开安装路径你会发现kubectl.exe,没错,就是你经常用的kubectl命令行的客户端工具。kubectl本来就能输出json的数据类型,集成前端更方便了。看到这里你是不是发现&#…

前端Long类型精度丢失:后端处理策略

文章目录 精度丢失的具体原因解决方法1. 使用 JsonSerialize 和 ToStringSerializer2. 使用 JsonFormat 注解3. 全局配置解决方案 结论 开发商城管理系统的品牌管理界面时,发现一个问题,接口返回品牌Id和页面展示的品牌Id不一致,如接口返回的…

Transformer--输入部分

🏷️上文我们简单介绍了Transformer模型的总体架构,本章我们主要介绍其输入部分 📖前言 📖文本嵌入层的作用 📖位置编码器的作用 📖前言 输入部分主要包括源文本嵌入层以及位置编码器,目标文本…

HX1838红外接收模块-红外遥控(外部中断+状态机)

目录 红外遥控 模块介绍 HX1838红外接收二极管 红外发射遥控器 遥控器键码 模块接线 NEC协议编码 状态机分析 驱动代码 IR.h IR.c main.c 红外遥控 红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行…

Unity + Hybridclr + Addressable + 微信小程序 热更新报错

报错时机: Generate All 怎么All 死活就是报错 生成微信小程序,并启动后 报错内容: MissingMethodException:AoT generic method notinstantiated in aot.assembly:Unity.ResourceManager:dll, 原因: Hybridclr 开发文档 解…

使用 Baklib 构建多语言知识库

技术的快速发展使企业能够更轻松地走向全球。在国外市场寻找新机会的关键方面之一是了解并与新客户群互动。此外,如果您在特定人群中拥有任何现有客户,那么让您的企业网站和支持也以他们可以参与的语言提供是合乎逻辑的。 假设您的公司以英语为主导市场…

SSL/TLS和SSL VPN

1、SSL/TLS SSL安全套接字层:是一种加密协议,用于在网络通信中建立安全连接。它在应用层和传输层(TCP/IP)之间提供数据加密、服务器身份验证以及信息完整性验证 SSL只保护TCP流量,不保护UDP协议 TLS:传输层…

GORM:优雅的Go语言ORM库

文章目录 引言GORM原理基础使用安装GORM定义模型连接数据库CRUD操作 高级使用关联事务回调 优点结论 引言 在Go语言开发中,数据库操作是不可或缺的一部分。虽然直接使用SQL语句可以灵活地与数据库交互,但随着项目规模的扩大,SQL语句的编写、…

成为git砖家(4): git status 命令简介

1. untracked 和 tracked 状态 Remember that each file in your working directory can be in one of two states: tracked or untracked. Tracked files are files that were in the last snapshot, as well as any newly staged files; they can be unmodified, modified, o…

华为od-开发-终端云面试总结

华为OD - 终端云 资面 主要问一些在校经历,做过那些项目,大学期间觉得做过的最有价值的事情,大学期间令你感到最有成就感的事情,期望薪资。 技术一面(1h20min)7.18 1、项目里使用到RPC去取代HTTP&#x…

Nginx周末部署

背景 Nginx是本人学习的一类中间件,上次完成了vue的搭建,所以顺便把项目加入Nginx吧 1. 镜像拉取与测试 查询dockerHub,选择最新最稳定的版本 docker pull nginx:stable-perl 执行下载 docker run -d --name mynginx -p 8080:80 -v D:\IM…

基于bert的自动对对联系统

目录 概述 演示效果 核心逻辑 使用方式 1.裁剪数据集 根据自己的需要选择 2.用couplet数据集训练模型 模型存储在model文件夹中 3.将模型转换为ONNX格式 4.打开index.html就可以在前端使用此自动对对联系统了。 本文所涉及所有资源均在传知代码平台可获取。 概述 这个生成器利用…

【Python检查两个列表是不是有重复项有关案例】

以下是一些具体的例子,展示了如何使用不同的方法来检查两个列表是否有重复项: 例子1:使用集合 list1 [1, 2, 3, 4, 5] list2 [4, 5, 6, 7, 8]# 转换为集合并求交集 duplicates list(set(list1) & set(list2))if duplicates:print(&q…

面完英伟达算法岗,心态崩了。。。

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解…

DS1302时钟芯片全解析——概况,性能,MCU连接,样例代码

DS1302概述: 数据: DS1302是一个可充电实时时钟芯片,包含时钟(24小时格式或12小时格式)、日历(年,月,日,星期)、31字节RAM(断电数据丢失&#x…

Fantastic-admin:Vue 中后台管理系统

Fantastic-admin:Vue 中后台管理系统 在当今的前端开发世界里,fantastic-admin 作为一款功能强大的 Vue 中后台管理系统框架,简直是开发者的福音。本文将介绍 fantastic-admin 的基本信息、特点,以及如何快速上手和使用。 项目简介…