数组指针的类型是什么?

时间:2017-03-22 00:02:06

标签: c pointers

当我在C中声明一个数组时:

char a[] = "something";

我理解 a 隐式是一个常量字符指针,即 a 的类型为:(char * const)

但是为什么以下语句会导致编译器警告不兼容的指针类型?

char * const * j = &a;

我设法摆脱它的唯一方法是明确地将右侧投射到(char * const *)

我假设&运算符返回一个常量指针并尝试:

char * const * const j = &a;

没有成功。

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

char a[] = "something";
     

我理解 a 隐式是一个常量字符指针,即 a 的类型为:(char * const)

错误,a属于(非常)char[10]

现在我们知道achar[10],很明显为什么以下内容无法编译:

char * const * j = &a;

&a属于char(*)[10]类型(即指向char[10]的指针)。 char(*)[10]char * const *完全无关。

如果你写了char* a = "something";,那么a就是char*