假设我声明一个二维数组为:
根据我的理解,a是一个int类型的双指针。
假设我按照以下方式声明指向整个行的指针。
“也就是说,
我收到了一个编译器警告,指出指针赋值不兼容。但是如果我写成:
这很好运作。 有人能告诉我我在这里做错了什么吗?
int a[10][10];
根据我的理解,a是一个int类型的双指针。
假设我按照以下方式声明指向整个行的指针。
int (*p)[10];
“也就是说,
a [0]
指向第 0 行,a [1]
指向第 1 行,依此类推。
因此,我尝试将 p 初始化为
”p = a[0]; /* so that p can point to row 0 */
我收到了一个编译器警告,指出指针赋值不兼容。但是如果我写成:
p = a;
这很好运作。 有人能告诉我我在这里做错了什么吗?
p[0]
和p[1]
以及p[i]
(对于所有0 <= i < 10)也不是指针。它们也是数组。它们会衰变成类型为int *
的指针。类型int *
与类型int (*p)[10]
不兼容。但是,你是正确的,数组的第i行的指针是int (*)[10]
类型的。所以你可以这样写:int (*row)[10] = &a[0];
。 - The Paramagnetic Croissant