详解strlen和sizeof在数组中的使用(二)

举报
执久呀 发表于 2022/02/18 12:27:55 2022/02/18
【摘要】 ​目录一、前言二、sizeof在字符数组中的题目这整题sizeof的答案是:32位平台下:64位平台下:​一、前言        前面我们已经提到了sizeof在整形数组的使用,因为strlen只能在字符数组中使用,所以上一    没涉及strlen,下篇一定(手动狗头),可能会迟到,但是不会缺席。其实在数组的使用考得挺频繁的 一般会出现一个字符数组然后呢,给出sizeof和strlen求数...




目录

一、前言

二、sizeof在字符数组中的题目

这整题sizeof的答案是:

32位平台下:

64位平台下:



一、前言


        前面我们已经提到了sizeof在整形数组的使用,因为strlen只能在字符数组中使用,所以上一 

   没涉及strlen,下篇一定(手动狗头),可能会迟到,但是不会缺席。其实在数组的使用考得挺频

繁的 一般会出现一个字符数组然后呢,给出sizeof和strlen求数组长度,考点在于\0是计算到了,

这类题目较为简单,在一维数组简单些,在二维数组略难一点点,在三维数组.......好啦,废话不多

说咱们,直接进入正题。





二、sizeof在字符数组中的题目


(友情提示,若是下例没看懂,可以看看第一篇:(17条消息) 详解strlen和sizeof在数组的中的使用(一)_执久呀的博客-CSDN博客


#include<stdio.h>
#include<string.h>
int main()
{

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

		printf("%d\n", sizeof(arr+0));

		printf("%d\n", sizeof(*arr+1));

		printf("%d\n", sizeof(&arr));

		printf("%d\n", sizeof(&arr+1));

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

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


	return 0;
}

第一个sizeof(arr),数组名单独放在sizeof中,表示的是整个数组,所以大小是6*1=6字节

有疑问的可以去看看第一篇,那里有详细介绍。

第二个sizeof(arr+0),数组名没有单独放在sizeof中,所以arr表示首元素的地址,首元素

地址+0还是首元素地址,因为是地址,所以是4或8字节

第三个sizeof(*arr+1),arr表示的是首元素地址,*arr表示的是首元素,*arr+1,表示首元素

自增1,即a+1,对于整形和字符型相加减,char会自动转化成int类型,char会自动转化成所对

的ascll值,如a是97,所以a+1是98了,但是int不能自动转化成char(后期会介绍,这里就不

多说了),所以这个值是98,为int类型,所以大小是4字节

第四个sizeof(&arr),&arr拿到了整个数组的地址地址,不用多说,既然是地址,那么大小就

4或8字节

第五个sizeof(&arr+1),&arr拿到了整个数组的地址,&arr+1,跳过了整个数组,因为sizeof

不会去计算,所以不存在什么所谓的越界访问。既然是地址那就是4或8字节

第六个sizeof(&arr[1]),arr[1]是第二个元素,&arr[1]表示拿到第第二个元素的地址,既然是

地址,所以是4或8字节

第七个 sizeof(&arr[1]+1),&arr[1]表示拿到第二个元素的地址,&arr[1]+1,表示的是第三个元

素的地址,既然是地址,(你们应该听吐了吧,我也快讲吐了),那就是4或8字节

其中第三题比较易错,多留意一下第三题吧。

这整题sizeof的答案是:

32位平台下:





64位平台下:


好啦,每日一道题就行啦哈哈,咱们下期在见



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。