大家好,我是晓星航。今天为大家带来的是strlen和sizeof在一维数组和二维数组中的计算与详细的解析!😀
1.一维数组strlen和sizeof的比较
1.1sizeof和strlen概念区分:
sizeof只关注占用空间大小,单位是字节,不关注类型,是操作符
strlen关注的字符串中\0的位置,计算的是\0之前出现了多少个字符,只针对字符串,是库函数
1.2特殊情况:
数组名是数组首元素的地址
这里有两个例外:
sizeof(数组名),这里的数组名是整个数组的,计算的是整个数组的大小,单位是字节。
&数组名,这里的数组名也表示整个数组,取出的是整个数组的地址
出上面两种特殊情况外,所有的数组名都是数组首元素的地址
1.3一维数组的例题讲解
一维数组:
当大家初看这些题目的时候是不是会感到很迷茫?没关系接下来晓星航将带领大家一步一步分析他们。
我们先给大家分析一下他们的结果。接下来验证我们的分析是否正确?!
这里我们要注意的是在32位和64位下的大小是不一样的。例如这里的指针在32位下是4个字节,而在64位下是8个字节。
1.4字符数组的例题讲解
例题一:
大家还是要先分析分析题目,自己先做一遍然后看讲解哦!
我们先给大家分析一下他们的结果。接下来验证我们的分析是否正确?!
注意:sizeof只关注占用空间大小,单位是字节,不关注类型,是操作符
strlen关注的字符串中\0的位置,计算的是\0之前出现了多少个字符,只针对字符串,是库函数
这里我们先将内存访问冲突的代码屏蔽掉,再验证结果,显然结果和我们分析的一样
例题二:
大家还是要先分析分析题目,自己先做一遍然后看讲解哦!
我们先给大家分析一下他们的结果。接下来验证我们的分析是否正确?!
这里我们先将内存访问冲突的代码屏蔽掉,再验证结果,显然结果和我们分析的一样
例题三:
大家还是要先分析分析题目,自己先做一遍然后看讲解哦!
我们先给大家分析一下他们的结果。接下来验证我们的分析是否正确?!
这里我们先将内存访问冲突的代码屏蔽掉,再验证结果,显然结果和我们分析的一样
1.5二维数组的例题讲解
大家还是要先分析分析题目,自己先做一遍然后看讲解哦!
我们先给大家分析一下他们的结果。接下来验证我们的分析是否正确呢?!
很明显我们的分析是对的!
这里我们对二维数组做个总结:
如果是a :
情况1:单独放置就表示整个数组
情况2:没有&,没有单独放在sizeof内部,a就表示首行元素地址,即第一行地址
情况3:a+1 没有&,没有单独放在sizeof内部, 即a表示第一行的地址+1 为第2行的地址
如果是a[0]:
情况1:单独放置表示第一行的数组名 sizeof计算的就是第一行的大小
情况2:没有&,没有单独放在sizeof内部,a[0]就表示首元素地址,即第一行第一列的元素地址
情况3:&a[0]+1 因为这里有&,所以a[0]表示第一行的地址 +1就表示为第二行的地址 如若用sizeof计算的话就是4/8个字节
感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘