指针和字符数组笔试题及其解析(第二组)

news2024/11/6 3:01:08

个人主页:Lei宝啊

愿所有美好如期而遇


前言:

数组名在寻常情况下表示首元素地址,但有两种情况例外:

1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小

2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址 

3.sizeof是操作符,不是函数,并且sizeof不计算括号里的表达式,他会在编译阶段检查括号里的表达式的类型属性,计算出大小。(任何表达式都有两种属性,值属性和类型属性,

int a = 3; short b = 2; b = a + b;这个表达式的值属性就是5,类型属性就是short)

 

第二组笔试题 

char arr[] = "abcdef";

printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(arr+0));
printf("%d\n", sizeof(*arr));
printf("%d\n", sizeof(arr[1]));
printf("%d\n", sizeof(&arr));
printf("%d\n", sizeof(&arr+1));
printf("%d\n", sizeof(&arr[0]+1));

printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));
printf("%d\n", strlen(&arr+1));
printf("%d\n", strlen(&arr[0]+1));

 答案

7 8 1 1 8 8 8

6 6 error error 6 随机值 5

(博主用的是64位机器,所以地址占的空间大小为8字节,如果得4的话,是32位机器) 

解析

	char arr[] = "abcdef";

	printf("%d\n", sizeof(arr));
	//sizeof(数组名),计算整个数组的大小,
	//字符串结尾还有\0占一个字节的空间,共7个字节

	printf("%d\n", sizeof(arr + 0));
	//类比arr+1,这里的arr代表数组首元素地址,所以4/8

	printf("%d\n", sizeof(*arr));
	//*arr访问的是char类型的数据,1个字节

	printf("%d\n", sizeof(arr[1]));
	//第二个元素,数据类型为char,1个字节

	printf("%d\n", sizeof(&arr));
	//&arr,指针类型为数组指针,此时取出的是整个数组的地址,
	//但归根结底还是指针,占4/8个字节

	printf("%d\n", sizeof(&arr + 1));
	//数组指针向后走一个指针的距离,4/8

	printf("%d\n", sizeof(&arr[0] + 1));
	//指向第二个元素,4/8

	//-------------------------------------------------------------------
	//-------------------------------------------------------------------

	//strlen是计算字符串长度的哦
	printf("%d\n", strlen(arr));
	//strlen遇到\0停止,所以得6

	printf("%d\n", strlen(arr + 0));
	//相同道理,6

	printf("%d\n", strlen(*arr));
	//error, *arr是'a',ASCII值为97,当做地址传入strlen,
	//成为野指针非法访问

	printf("%d\n", strlen(arr[1]));
	//error, 'b'也同理

	printf("%d\n", strlen(&arr));
	//&arr与arr地址相同,尽管其意义不同,
	//&arr指针类型为数组指针,会被转换成strlen接受的指针类型,
	//所以我们最终得到的还是6

	printf("%d\n", strlen(&arr + 1));
	//随机值,&arr+1跳过的是整个数组,所以我们无法判断何时会
	//再遇见\0,。

	printf("%d\n", strlen(&arr[0] + 1));
	//指向第二个元素,所以得到5

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

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

相关文章

OLED透明屏模块:引领未来显示技术的突破

OLED透明屏模块作为一项引领未来显示技术的突破,以其独特的特点和卓越的画质在市场上引起了广泛关注。 根据行业报告,预计到2025年,OLED透明屏模块将占据智能手机市场的20%份额,并在汽车导航系统市场中占据30%以上份额。 那么&am…

TD3算法

TD3算法 全称Twin Delayed DDPG,是对DDPG算法的继承、发展和改进,论文 改进如下: T w i n \mathcal{T}win Twin:使用了两个critic来评估actor的动作价值,对应两个critic target,一个actor target&#xff0…

[漏洞复现] metinfo_6.0.0_file-read(任意文件读取)

文章目录 漏洞描述漏洞等级影响版本漏洞复现基础环境漏洞点第一次测试第二次测试第三次测试第四次测试深度利用EXP编写EXP使用案例漏洞挖掘指纹信息修复建议 本次漏洞复现仅供学习使用,如若非法他用,与平台和本文作者无关,需自行负责&#xf…

Solidity 小白教程:10. 控制流,用 solidity 实现插入排序

Solidity 小白教程:10. 控制流,用 solidity 实现插入排序 这一讲,我们将介绍solidity中的控制流,然后讲如何用solidity实现插入排序(InsertionSort),一个看起来简单,但实际上很容易…

系统架构设计师(第二版)学习笔记----计算机系统基础

【原文链接】系统架构设计师(第二版)学习笔记----计算机系统基础 文章目录 一、计算机硬件1.1 计算机硬件的组成1.2 处理器指令集1.3 处理器层次1.4 总线分类1.5 接口的种类 二、计算机操作系统2.1 计算机软件分类2.2 操作系统的作用2.3 操作系统的特征2…

【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述

【FusionInsight 迁移】HBase从C50迁移到6.5.1(01)迁移概述 HBase从C50迁移到6.5.1(01)迁移概述迁移范围迁移前的准备HDFS文件检查确认HBase迁移目录确保数据落盘停止老集群HBase服务停止新集群HBase服务 HBase从C50迁移到6.5.1&a…

L1-063 吃鱼还是吃肉(Python实现) 测试点全过

前言: {\color{Blue}前言:} 前言: 本系列题使用的是,“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度。更新取决于题目的难度,…

如何在opensuse build service (obs)打包deb包用于分发各个发行版

1.打开网页 https://build.opensuse.org/ 注册账号 创建home project 创建项目 需要配置需要打包的镜像如debian12 ubuntu等 先配置整体home仓库的全部 ​由于是home的,可能不同的项目有些不需要,可以在项目中禁用一些,再配置某个项目需要…

c语言 4.0

💂 个人主页: 程序员爱摸鱼🤟 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦💅 想寻找共同成长的小伙伴,可以互粉哦 💬文章目录…

如何用Python机器学习、深度学习提升气象、海洋、水文领域实践能力!!!

Python是功能强大、免费、开源,实现面向对象的编程语言,能够在不同操作系统和平台使用,简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库,还有丰富的第三方库,Python在数据处理、科学计算、数学建模、数据挖…

测试用例设计方法真的很重要啊

记得我刚入职到部门的第一个星期,除了去熟悉公司部门的一些业务流程,就是去看我将要去测的系统的系统说明书,然后去熟悉各种业务流程,自己还是有点放不开,虽然之前也在一家公司实习过,主要是功能测试&#…

Apache HTTPD 多后缀解析漏洞复现

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件: AddType text/html .html AddLanguage zh-CN .cn 其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言&…

vue 弹框中包含avue-curd /el-table第一次点击样式正常 再次点击表格序号列和其他列错位

1.首先这里点击时获取接口数据需要等数据返回之后再打开弹框 2.给表格使用v-if 参数就是和弹框的参数一样 弹框显示再重新渲染表格就OK了

超低保证金!揭秘期权卖方的保证金是多少?

很多期权老手交易一段时间后,开始对期权卖方有了兴趣。“对于期权卖方的保证金是一笔不低的费用,如果是在分仓平台注册的账户,保证金是固定在大概在3000-4000元一张了。下文介绍超低保证金!揭秘期权卖方的保证金是多少&#xff1f…

LeetCode刷题笔记【23】:贪心算法专题-1(分发饼干、摆动序列、最大子序和)

文章目录 前置知识贪心算法的本质什么时候用贪心算法?什么时候不能用贪心?贪心算法的解题步骤 455.分发饼干题目描述解题思路代码 376. 摆动序列题目描述解题思路代码 53. 最大子序和题目描述暴力解法动态规划贪心算法 总结 前置知识 贪心算法的本质 贪心的本质是选择每一阶…

Android文字识别-阿里云OCR调用

0,阿里云OCR有在线识别接口,直接用httpPOST调用就能实现,开发起来很快捷。识别率还蛮好,摄像头斜着拍也能识别出来。实测识别时间单次在2s左右,普通使用使能满足需求的。 1,在阿里云页面先注册申请免费试用…

工作失误合集,这个月的工资被扣没咯!

俗话说“马有失蹄,人有失足”,不管是程序员还是其他行业,在工作的的时候即便是职场老手也有失手的时候。 工作中出现纰漏不可避免,但是总有那么些人秀的即使是工作出错,也错的惊为天人。今天就带大家来看看那些在工作…

C语言嵌入式系统编程注意事项之内存操作

C语言嵌入式系统编程注意事项之内存操作 在嵌入式系统的编程中,常常要求在特定的内存单元读写内容,汇编有对应的MOV指令,而除C/C以外的其它编程语言基本没有直接访问绝对地址的能力 数据指针 在嵌入式系统的编程中,常常要求在特…

04-JVM对象创建深度剖析

上一篇:03-JVM内存模型剖析与优化 对象创建的主要流程: 1.类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有…

别看了!亚马逊选品工具全都在这儿了(上)

Tool哥翻遍了全网资料,找了30款亚马逊选品工具,几乎囊括了各种主流、小众的选品工具,而且会一直更新,直接收藏就完事儿了~ Amztracker AMZ Tracker(抓客)官网 | 亚马逊关键词|亚马逊选品数据分析工具|亚马…