c - 二维数组指针和 *arr[] 有什么区别?
问题描述
我试图了解这样的数组有什么区别:
int arr[2][2] = {{0, 1}, {2, 3}};
int* pArr = (int*)arr;
for(int i = 0; i < 4; i++)
{
printf("%d ", pArr[i]);
}
和这个:
int* foo[2] = {arr1, arr2}; // Let's say the length of arr1 is 3 and arr2 is 1
int* pFoo = (int*)foo;
for(int i = 0; i < 4; i++)
{
printf("%d ", pFoo[i]);
}
它们在我看来几乎相同,但输出完全不同。我得到了奇怪的结果,如果我按照我在这里给出的例子而不是给我大整数,但是如果我添加更多的数组和项目,它也会给我更小的整数。输出示例: 输出
*在输出图像中:上面的整数是第一个二维数组,下面的整数是第二个数组指针。
有人可以向我解释为什么会发生这种行为吗?
解决方案
多维数组是单个内存块。指向不一定连续的数据的指针数组(单个块)。
后者对于管理稀疏数组或每个指向子数组的大小不一定相同的情况很有用。