您好,欢迎来到画鸵萌宠网。
搜索
您的当前位置:首页二维数组与sizeof()

二维数组与sizeof()

来源:画鸵萌宠网

话不多说,直入主题,先看代码:

int main() {
	int arr[3][4] = { 0 };
	printf("%d\n",sizeof(arr) );
	printf("%d\n", sizeof(arr[0][0]));
	printf("%d\n", sizeof(arr[0]));  //a[0]是第一行数组数组名 数组名在sizeof里面意义代表整个数组 4×4=16
	printf("%d\n", sizeof(arr[0]+1));  //第一行数组的首地址 +1后为第一行第二个元素地址 
	printf("%d\n", sizeof(*(arr[0] + 1)));
	printf("%d\n", sizeof((arr+1))); //arr是二维数组的数组名 没有sizeof(arr)也没有&arr 所以arr是首元素地址而二维数组的首元素是第一行,arr就是第一行的地址,所以+1后是第二行的首地址
	printf("%d\n", sizeof(*(arr+1)));  
	printf("%d\n", sizeof(&arr[0]+1)); //第一行数组名取地址再加1 第二行地址
	printf("%d\n", sizeof(*(&arr[0] + 1)));
	printf("%d\n", sizeof(*arr));//  16
	printf("%d\n", sizeof(arr[3])); // sizeof里面的表达式不进行运算 不会访问第四行 所以arr[3]和arr[1]一样 16
}

你能正确的把上述代码输出内容全部计算正确吗?

我们先看输出结果:

 然后我们来依次解释每一个内容:

1.sizeof(arr)

arr为数组名,数组名单独放在sizeof()内部代表整个数组,所以sizeof()计算整个数组的大小,故为48个字节

2.sizeof(arr[0][0])

sizeof()里面为二维数组的首元素,故为4个字节

3.sizeof(arr[0])

4.sizeof(arr[0]+1)

5. sizeof(*(arr[0] + 1))

第二个元素解引用后的大小,故为4个字节

6.sizeof((arr+1))

7.sizeof(*(arr+1))

8.sizeof(&arr[0]+1)

9.sizeof(*(&arr[0] + 1))

10.sizeof(*arr)

11.sizeof(arr[3])

这个比较易错,这个并不是溢出的错误,sizeof()中并不对里面的表达式进行计算,所以arr[3]和arr[0]是一样的,故结果是16

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务