4. 二维指针练习(sizeof)
二维数组名和&二维数组名
二维数组名,指的是第一行的地点,+1会跳过第一行
&二维数组名,指的是整个数组地点 +1会跳过整个数组
4.1代码验证
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- int a[3][4] = { 0 };
- printf("%d\n", sizeof(a)
- );//a单独在sizeof里面,表示整个数组,求整个数组大小,3行四列,12个元素,是12*4 = 48字节
- printf("%d\n", sizeof(a[0][0])
- );//0行0列元素,求大小:4字节
- printf("%d\n", sizeof(a[0])
- );//a指的是第一行元素地址,a[0]是第一行的数组名,数组名单独放在sizeof内部,计算的就是数组(第一行)的大小:16个字节
- printf("%d\n", sizeof(a[0] + 1)
- );//a[0]作为第一行的数组名,没有单独放在sizeof内部,没有取地址,表示的就是数组首元素的地址
- //那就是a[0][0]的地址,a[0]+1就是第一行第二个元素的地址,大小:4字节/32位机器 或 8字节/64位机器
- printf("%d\n", sizeof(*(a[0] + 1)
- ));//a[0]+1是第一行第二个元素 对其解引用,取出的是第二个元素’0',大小:4字节
- printf("%d\n", sizeof(a + 1)
- );//a指的是第一行元素地址,+1,值的是第二行元素地址,地址大小:4字节/32位机器 或 8字节/64位机器 //a类型 - int (*)[4] a+1类型--> int(*)[4]
- printf("%d\n", sizeof(*(a + 1))
- );//a + 1 是第二行元素地址,解引用,*(a+1)表示的就是第二行,4个元素 大小:16字节
- printf("%d\n", sizeof(&a[0] + 1)); //&a[0]是第一行的地址,&a[0]+1是第二行的地址,地址大小:4字节/32位机器 或 8字节/64位机器
- printf("%d\n", sizeof(*(&a[0] + 1)));//*(&a[0] + 1) 是对第二行的地址解引用,得到的就是第二行,计算的就是第二行的大小 :16字节
- printf("%d\n", sizeof(*a)
- );//a是第一行元素地址,解引用,计算的就是第一行的大小:16字节
- printf("%d\n", sizeof(a[3])
- );如果数组存在第四行,a[3]就是第四行的数组名,数组名单独放在sizeof内部,计算的是第四行的大小:16字节
- return 0;
- }
复制代码
4.2代码分析
4.2.1 sizeof(a)
4.2.2 sizeof(a[0][0])
4.2.3 sizeof(a[0])
4.2.4 sizeof(a[0] + 1)
4.2.5 sizeof(*(a[0] + 1)
4.2.6 sizeof(a + 1)
4.2.7 sizeof(*(a + 1))
4.2.8 sizeof(&a[0] + 1)和 sizeof(*(&a[0] + 1))
- sizeof(&a[0] + 1)
- sizeof(*(&a[0] + 1))
复制代码
4.2.9 sizeof(*a)
4.2.11 sizeof(a[3])
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |