int main()
{
int a[3][4] = {0};
printf("%d\n", sizeof(a)); //48--二维数组大小
printf("%d\n", sizeof(a[0][0])); //4--第一个元素大小
printf("%d\n", sizeof(a[0])); //16--a[0]表示第一行数组的数组名
printf("%d\n", sizeof(a[0] + 1)); //4
//4--a[0]为第一行数组的数组名,此时表示首元素地址
//a[0] + 1为第一行第二个元素的地址
printf("%d\n", sizeof(*(a[0] + 1))); //4--第一行第二个元素大小
printf("%d\n", sizeof(a + 1)); //4
//4--a为二维数组首元素地址--第一行的地址
//a + 1表示第二行的地址
printf("%d\n", sizeof(*(a + 1))); //16--第二行数组大小
printf("%d\n", sizeof(&a[0] + 1)); //4--第二行的地址
printf("%d\n", sizeof(*(&a[0] + 1))); //16--第二行数组大小
printf("%d\n", sizeof(*a)); //16--第一行数组大小
printf("%d\n", sizeof(a[3])); //16
//sizeof()--函数内部表达式不会进行访问,该函数只计算大小
return 0;
}
二维数组 + sizeof()练习
本文通过实例解析了二维数组`a`在C/C++中的内存布局,展示了sizeof运算符在不同情况下的应用,包括数组大小、元素大小、指针计算。重点讨论了数组名、指针和元素地址的计算,以及如何使用sizeof获取不同类型的数据大小。
摘要由CSDN通过智能技术生成