为什么以下程序会出现'conversion' : cannot convert from int[1][1] to int**
错误?我正在使用Windows 7下的VS2008进行编译。
int main(){
int a[1][1] = {0};
int **p = a;
}
答案 0 :(得分:6)
您只能将数组转换为指针一次。 “指针==数组”抽象从第二级开始打破。
你可以做到
int (*p)[1] = a; //convert an array of arrays of length 1
// to a pointer to arrays of length 1
但是很明显,如果在每种情况下都看到内存布局,就无法将多维数组转换为指针指针:
//multidimentional arrays (a[][])
a -> [first row][second row][...]
//pointers to pointers (**p)
p -> [p0][p1][p2]
| | |
| | \-> [third row]
| \-----> [second row]
\----------> [first row]
在指向指针的方法中,行不一定是连续的,并且脊柱需要有一个指向各行的额外数组。
答案 1 :(得分:4)
a
是int
s数组的数组,因此它可以衰减为指向第一个元素的指针,该元素是int
的数组。所以你需要按如下方式声明指针:
int (*p)[1] = a;
更抽象地说,如果你有一个数组T a[N];
,那么a
会衰减到T*
。在您的情况下,您有T = int[M]
,因此T* = int(*)[M]
。