C 数组指针的类型是什么?

C 数组指针的类型是什么?,c,pointers,C,Pointers,在C中声明数组时: char a[] = "something"; 我知道a隐式地是一个常量字符指针,即a的类型为:char*const 但是,为什么下面的语句会导致编译器警告不兼容的指针类型 char * const * j = &a; 我设法摆脱它的唯一方法是显式地将右侧强制转换为char*const* 我假设&operator返回一个常量指针,并尝试: char * const * const j = &a; 没有成功 这是怎么回事 我知道a隐式地是一个常量字符指针,

在C中声明数组时:

char a[] = "something";
我知道a隐式地是一个常量字符指针,即a的类型为:char*const

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

char * const * j = &a;
我设法摆脱它的唯一方法是显式地将右侧强制转换为char*const*

我假设&operator返回一个常量指针,并尝试:

char * const * const j = &a;
没有成功

这是怎么回事

我知道a隐式地是一个常量字符指针,即a的类型为:char*const

错误,a的类型为非常量字符[10]

现在我们知道a是char[10],很清楚为什么下面的代码没有编译:

char * const * j = &a;
&a的类型为char*[10],即指向char[10]的指针。char*[10]和char*const*完全不相关


如果你写了char*a=something;,那么a将是字符*

a不是指针,而是数组。在某些情况下,它将衰减为指向[0]的指针或字符*。。。但是&a没有给出指针的地址,它给出了数组的地址。。。它与&a[0]的地址相同,但类型不同,因为它指向数组而不是字符。char*const*const j是指向指针的指针,而&a不是;默默地皈依?是的,这就是众所周知的。哦……这就解释了。我认为数组和指针在内部是以相同的方式表示的。啊,一点也不。指针表示为整数,而数组表示为对象序列。Hmmm…所以在编译完成所有检查之后;在运行时,数组访问操作是否只是执行指针运算?或者还有其他的吗?还是由编译器来决定?
char * const * j = &a;