const指针、数组指针、指针数组理解

 指针中,关键字const放在不同的位置表示的意义:

1、const int *p;

    这种情况下,表示的是一个指向常量的指针,程序中不能通过指针来改变它所指向的值,但是指针本身的值可以改变,即指针可以指向其他的数据。就好像她,她就像冷血动物,她是那么的无情,不论我是多么的爱她,为她做多少的改变,又或者其他人对她的关心,她都没有感觉,她只顾她自己,或许我是该去寻找生命中的另外一个,结束这无尽的痛苦。

2、int * const p;

    这种情况下,声明一个指针常量(也称常指针)。指针本身的值不可变,即它不能再指向其他数据,但它所指向的数据的值可以改变。就好像我,我的心里只有她,一直都不会改变,你只要问我最爱的人是谁,一定是她。可是她的心我不懂,我不明白她的心里到底有没有我,还是到底她的心在想些什么,就算有一天,她离我而去,她的心里装着别人,我还是一样傻傻的坚持着。

3、const int * const p;

    这种情况声明一个指向常量的指针常量,指针本身的值不可改变,它所指向的数据的值也不能通过指针改变。就好像我们曾经的誓言,我的心里只有她,她的心里只有我,我们不离不弃,相濡以沫,天荒地老,海枯石烂,永不分离。

 

理解数组指针

 

x=5;y=7;

因为p是一个指向包含3个元素的以为数组的指针,p=p[0]=&a[0]=&{1,4,7}; p[i]=p[1]=&a[1]=&{2,5,7}; p[i]+j=p[1]+1=&5;

p=a[],a[][]=p[];方括号的优先级大于*号,所以y其实质是a[],而x实质是a[][];y=*(p+i+j)=*(p+2)=7; 

 

理解指针数组

*pa[0]= 1
*(pa[0]+1)= 2
*(pa[1])= 2367460
pb[0]= abc
pb[1]= def

这里因为int (*pa)[5] : pa是一个指向 int[5]的一个数组指针

*(pa[1])=*(*(pa+1));相当于把这个指针指的位置移动了一格。

pa指向的是一个数组,把数组整体当做一个元素来看,当指针的值改变的时候,那么所指向的值也肯定不是原来的这个数组了

 

int (*pa)[5]=&a;

如果是普通的指针,则初始化赋值的时候是赋值的这个数组中的第一个元素,

a是代表这个数组的起始位置的地址,比如a[0]

而数组指针初始化赋值需要赋的是整个数组在内存中的位置,&a是代表整个数组在内存中的位置,就把整个数组当做一个整体来看

 

posted on 2012-03-08 21:57  duancanmeng  阅读(346)  评论(0编辑  收藏  举报

导航