指针数组与数组指针,指针常量与常量指针

来源:互联网 发布:nginx访问js报错403 编辑:程序博客网 时间:2024/05/22 11:49

对于上面的东西,我在这博大的中华文化中绕了好久才绕出来,深怕又绕进去了,害怕的我马上写点东西记下来
我仍旧是会区别不出来指针常量和常量指针,但是从代码上我可以认出他们,这就够了

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