我试图理解这样的数组之间有什么区别:
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]);
}
它们对我来说看起来几乎相同,但输出完全不同。 我得到了奇怪的结果,如果我按照这里给出的示例进行操作,它会给出大整数,但如果我添加更多数组和项目,它也会给出较小的整数。 输出示例: Output
*在输出图像中:上面的整数是第一个二维数组,下面的整数是第二个数组指针。
有人可以向我解释一下为什么会发生这种行为吗?
最佳答案
多维数组是单个内存块。指向数据的指针数组,不一定是连续的(单个 block )。
后者对于管理稀疏数组或每个指向子数组的大小不一定相同的情况很有用。
关于c - 二维数组指针和 *arr[] 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716825/