# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
int main()
{
//初始化二维数组值;
int a[3][4] = { 0 };
//判断二维数组的大小值;
printf("%d\n", sizeof(a));
//结果:48
//原因:二维数组中,sizeof(数组名)同样是计算整个数组的大小;
printf("%d\n", sizeof(a[0][0]));
//结果:4
//原因:a[0][0]表示的是二维数组第一行第一列那个元素;
printf("%d\n", sizeof(a[0]));
//结果:16
//原因:a[0]表示的是二维数组的第一行元素,一行有四列;
printf("%d\n", sizeof(a[0] + 1));
//结果:4/8
//原因:a[0] + 1 ---> a[0][0] + 1 (相当于二维数组第一行第二列元素的地址);
printf("%d\n", sizeof(*(a[0] + 1)));
//结果:4
//原因:*(a[0] + 1)就是二维数组第一行第二个元素;
printf("%d\n", sizeof(a + 1));
//结果:4/8(是地址就是4/8个字节)
//原因:a虽然是二维数组的地址,但是并没有单独放在sizeof内部,也没取地址;
// a表示首元素的地址,二维数组的首元素是它的第一行,a就是第一行的地址;
// a + 1就是跳过第一行,表示第二行的地址;
printf("%d\n", sizeof(*(a + 1)));
//结果:16
//原因:*(a + 1)相当于对二维数组第二行地址进行解引用;
printf("%d\n", sizeof(&a[0] + 1));
//结果:4/8
//原因:&a[0] 对第一行的数组名进行取地址,拿出的是第一行的地址;
// &a[0] + 1 得到的是第二行的地址;
printf("%d\n", sizeof(*(&a[0] + 1)));
//结果:16
//原因:解引用第二行地址,表示的是二维数组第二行;
printf("%d\n", sizeof(*a));
//结果:16
//原因:a表示的是首元素的地址,也就是第一行元素的地址;
// *a表示的是第一行的所有元素;
printf("%d\n", sizeof(a[3]));
//结果:16
//原因:
return 0;
}
二维数组判断大小
最新推荐文章于 2024-07-19 15:45:46 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)