请考虑以下代码段:
int x[] ={10,20,30,40,50};
int *p;
int **q;
p = x; /* Obviously p now holds base address of array. So no problem here */
q = &x; /* Error. Why? */
我在gcc编译器中收到此错误。
error: cannot convert ‘int (*)[5]’ to ‘int**’ in assignment q = &x;
数组变量可以被视为指向数组第一个元素的常量指针。那么为什么我不能将常量指针的地址,即& x分配给指针变量q?
的指针答案 0 :(得分:2)
数组在某些上下文中衰减为指针,例如赋值,或将其传递给函数。
address-of运算符&
不会将数组衰减为指针。就这么简单。相反,你得到一个指向数组的指针。在这种情况下:
int (*q)[5];
q= &x; // Works just fine