您的位置:首页 > 其它

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

2012-03-08 21:57 302 查看
指针中,关键字const放在不同的位置表示的意义:

1、const int *p;

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

2、int * const p;

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

3、const int * const p;

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

理解数组指针

#include<iostream.h>

void main()

{

int a[3][3]={1,2,3,4,5,6,7,8,9};

int i=1,j=1;

int (*p)[3];

p=a;

int x = *(p[i]+j);

int y = *(p+i)[j];

cout<<x<<" "<<y<<endl;

}


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;

理解指针数组

#include<iostream.h>

void main()

{

int a[5]={1,2,3,4,5};

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

cout<<"*pa[0]= "<<*pa[0]<<endl;

cout<<"*(pa[0]+1)= "<<*(pa[0]+1)<<endl;

cout<<"*(pa[1])= "<<*(pa[1])<<endl;

char *pb[5]={"abc","def","123","456","789"};

cout<<"pb[0]= "<<pb[0]<<endl;

cout<<"pb[1]= "<<pb[1]<<endl;

}

*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是代表整个数组在内存中的位置,就把整个数组当做一个整体来看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: