对于上面的东西,我在这博大的中华文化中绕了好久才绕出来,深怕又绕进去了,害怕的我马上写点东西记下来
我仍旧是会区别不出来指针常量和常量指针,但是从代码上我可以认出他们,这就够了
int *p[]; //指针数组,指针型数组,是一个数组,类型为*
int (*p)[]; //数组指针,数组型的指针,是一个指针,指向一个int []数组
从名字上来看,可以知道哪个在后面就可以确定是数组还是指针了,但从中文弄清了了两个名次的区别对于编程毫无作用
从编译原理角度来看,优先级和右结合让我不再迷茫,[]优先级高于*
,编译器读int p[]的时候,先让[]与p进行左结合,然后再与结合,然后再与int结合,也就是说p首先被确定是一个数组,然后该数组中的元素都是int *类型的。
而int (*
p)[],则表明p首先是一个指针了,指向的类型是一个int ,
const int *p; //指针是变量,指向的内容是常量(const int)
int* const p; //指针是常量,指向的内容是变量(int)
从名字上来看,对不起,我看不出来…
还是从编译的角度来看吧
const int *
p,*
与p结合,p是一个指针,指向的类型是const int,
int *
const p,const与p结合,p是一个常量,然后与*结合,p是一个指针,最后指向int
看出一个规律,从右往左读就可以搞清楚这两个东西了
参考:
http://blog.csdn.net/Eric_Jo/article/details/4138548
https://www.zhihu.com/question/19829354