背景概要
昨天晚上参加小组C++讨论会,内容涉及到很多方面,主要包括this指针,重载运算符函数、数组指针和指针数组、静态成员static等等,大家反映都很积极。当讨论到*P与P的知识点时,卡壳了。。。
从开始准备C++开始,大家就普遍反映对*P和P的概念有点混乱,有时候可能碰巧答对了,再换个数据又不会了。。。而学习C++,指针是必学的,今天就跟大家讲一下我的理解,虽然马上就要考试了,我还是希望可以帮到有需要的同学,有不恰当的地方欢迎指正。
P *P &P
要想分清楚这几个表达式,就要弄清楚他们分别代表的含义。
在此之前,我们看一下下面的表格:
表达式 |
int a |
int * P |
类型 |
int |
int * |
变量 |
a |
P |
P ,指针变量。学习指针,我们首先了解的就是:指针存的是指针所指向存储空间的地址,简单的来理解就是指针变量存的是地址,所以P代表的是地址,即门牌号。
*P,取值,得到P指针指向的地址空间内存放的实际内容,即指定门牌号的住宅中的人。
&P,取址,不难理解就是取地址,所以&P得到的是地址,也是门牌号。
下面通过一个实例来理解一下:
已知 int a[5]={1,2,3,4,5},*P=a.现在我想要得到数值4,有下面几个表达式:
A)*P+4 B)*(P+3) C)P+3
接下来我们一一看一下每个表达式的含义:
A,*P,取值,得到P指向的存储空间的首地址的存储内容,这里是1,所以*P+4=5,选项错误。
B,*P,取值;P,代表地址。现在P指向的地址是20,所以P+3=23,相当于指针下移3个存储单元,现在指向地址23,所以*(P+4)=4.
C,从B选项已得知P+3=23,它的含义是地址,所以C错误。
以上就是我对于指针这一块儿的理解,马上就要考试了,祝大家考试必过!