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

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

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值