【发布时间】:2014-07-04 17:12:31
【问题描述】:
假设我将一个二维数组声明为:
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;
这很好用。
谁能告诉我我在这里做错了什么?
【问题讨论】:
-
“根据我的理解,a 是 int 类型的双指针”——不,它是一个数组数组。它不是一个指针。它不是“双指针”。它不是指针对指针。这是一个 array (数组)。因此,
p[0]和p[1]和p[i](对于所有 0 也不是指针。它们也是数组。它们衰减为int *类型的指针。int *类型与int (*p)[10]类型不兼容。但是,您是正确的,指向数组第 i 行的 指针 的类型是int (*)[10]。所以你可以这样写:int (*row)[10] = &a[0];. -
“根据我的理解,a 是 int 类型的双指针” 最普遍且持续存在的误解之一。了解数组和指针之间的区别至关重要,不要被交换符号的语法能力所迷惑。
-
不是重复的...我不关心这里的语法。