C语言中二重指针和二维数组赋值的问题?

新手上路,请多包涵
int arr[1][1] = {{1}};
int **p = arr;

为什么这种方法给二重指针赋值不对?

阅读 2k
2 个回答

首先要理解一个问题,二维数组在内存里面的存放是连续的,多维数组可以理解为是使用上的语法糖。

int arr[2][2] = { { 1, 2 }, { 3, 4 } };
int* p = (int*)arr;
for (int i = 0; i < 4; i++)
    printf("%d ", p[i]);
输出是:1 2 3 4

而 int** p; 表明 p 指向的是一个 int* 的指针,这明显是不对的。如果你一定要用指针的化,也只能是: int(*p)[1] = arr; 这么用才可以。

int arr[1][1]={{1}}; // 其实在存储上还是1维数组,所以arr并不是指向指针的指针变量,仅仅是指针变量
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题