假设我将一个二维数组声明为:
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)
这工作正常。
有人可以告诉我我在这里做错了什么吗?
根据我的理解,a 是 int 类型的双指针。
你错了。a是数组的数组类型int。数组名称转换为指向其第一个元素的指针,除非它是sizeof和一元的操作数&。
也
a[0]指向行0,a[1]指向行1..等等。
号a[0]点到行的第一个元素0和a[1]指向列的第一个元素1衰变后。&a[0]会给你行的地址0
p = &a[0]; // Equivalent to p = a
Run Code Online (Sandbox Code Playgroud)