当我在C中声明一个数组时:
char a[] = "something";
我理解 a 隐式是一个常量字符指针,即 a 的类型为:(char * const)
但是为什么以下语句会导致编译器警告不兼容的指针类型?
char * const * j = &a;
我设法摆脱它的唯一方法是明确地将右侧投射到(char * const *)
。
我假设&
运算符返回一个常量指针并尝试:
char * const * const j = &a;
没有成功。
这里发生了什么?
答案 0 :(得分:4)
char a[] = "something";
我理解 a 隐式是一个常量字符指针,即 a 的类型为:
(char * const)
错误,a
属于(非常)char[10]
。
现在我们知道a
是char[10]
,很明显为什么以下内容无法编译:
char * const * j = &a;
&a
属于char(*)[10]
类型(即指向char[10]
的指针)。 char(*)[10]
和char * const *
完全无关。
如果你写了char* a = "something";
,那么a
就是char*
。