【C语言】万字详解——sizeof与strlen的用法
数组名的意义
一维数组
sizeof用法
字符数组
sizeof用法
strlen的用法
字符串数组
sizeof用法
strlen的用法
指针与字符串
sizeof用法
strlen用法
二维数组
sizeof
数组名的意义
在讲所有东西之前,需要先明确一个关键问题:
1.sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小, 单位是字节
2.&数组名,这里的数组名表示整个数组,取出的是整个数组的地址
3.除此之外所有的数组名都表示首元素的地址。
一维数组
sizeof用法
//一维数组
int a[] = { 1,2,3,4 };
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(a + 0));
printf("%d\n", sizeof(*a));
printf("%d\n", sizeof(a + 1));
printf("%d\n", sizeof(a[1]));
printf("%d\n", sizeof(&a));
printf("%d\n", sizeof(*&a));
printf("%d\n", sizeof(&a + 1));
printf("%d\n", sizeof(&a[0]));
printf("%d\n", sizeof(&a[0] + 1));
运行结果:
解:
printf("%d\n", sizeof(a)); 16字节
因为int a[ ]里有4个元素,每个元素是int类型,占四个字节,所以整个数组大小为16字节
printf("%d\n", sizeof(a + 0)); 4/8字节在32/64位平台下
此时此刻的数组名a表示的是首元素地址,首元素地址+0,还是首元素地址,地址的大小为 4/8在32/64位平台下
printf("%d\n", sizeof(*a)); 4字节
a是数组名,表示首元素地址,然后对首元素地址解引用,所以*a就是首元素,首元素是个int型,大小为4字节
printf("%d\n", sizeof(a + 1)); 4/8字节在32/64位平台下
a是数组名,表示首元素地址,a+1是第二个元素的地址,所以大小为4/8字节在32/64位平台下
printf("%d\n", sizeof(a[1])); 4字节
a[1]就是第二个元素,大小为4字节
printf("%d\n", sizeof(&a)); 大小为4/8字节在32/64位平台下
&a取出的是整个数组的地址(从数值的角度看等于首元素地址),只要是地址,大小就为4/8字节在32/64位平台下
printf("%d\n", sizeof(*&a)); 16字节
&a取出的是整个数组的地址,* &a是对整个数组的地址解引用,拿到的是整个数组,所以大小为16字节
printf("%d\n", sizeof(&a + 1)); 4/8字节在32/64位平台下
&a是数组的地址,&a+1是数组的地址+1,虽然相当于跳过了整个数组,但还是一个地址,所以大小还是4/8
printf("%d\n", sizeof(&a[0])); 4/8字节在32/64位平台下
第1个元素地址,地址大小为4/8字节在32/64位平台下
printf("%d\n", sizeof(&a[0] + 1)); 4/8字节在32/64位平台下
第一个元素地址+1,就是第二个元素地址,地址大小为4/8字节在32/64位平台下
————————————————
版权声明:本文为CSDN博主「敲代码的布莱恩特」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/DerrickWestbrook/article/details/120114553