指向二维数组中整行的指针

Sum*_*han 3 c arrays pointers

假设我将一个二维数组声明为:

int a[10][10];
Run Code Online (Sandbox Code Playgroud)

根据我的理解,a 是 int 类型的双指针。

假设我声明了一个指向整行的指针,如下所示。

int (*p)[10];
Run Code Online (Sandbox Code Playgroud)

a[0]指向第 0 行,a[1]指向第 1 行……依此类推。

所以我尝试将 p 初始化为

p = a[0];  /* so that p can point to row 0 */
Run Code Online (Sandbox Code Playgroud)

我收到不兼容的指针分配的编译器警告。但如果我写

p = a;
Run Code Online (Sandbox Code Playgroud)

这工作正常。

有人可以告诉我我在这里做错了什么吗?

hac*_*cks 5

根据我的理解,a 是 int 类型的双指针。

你错了。a是数组的数组类型int。数组名称转换为指向其第一个元素的指针,除非它是sizeof和一元的操作数&

a[0]指向行0a[1]指向行1..等等。

a[0]点到行的第一个元素0a[1]指向列的第一个元素1衰变后。&a[0]会给你行的地址0

p = &a[0];  // Equivalent to p = a 
Run Code Online (Sandbox Code Playgroud)