C++语言学习第十三课小结

指针学习:

首先指针是c++语言的灵魂,它的作用是改变内存中相应地址的变量数值,最大内存数在内存中表示为FFFFFFFE,这个是16进制下最大数的表现,字符的话相当于2的32次方吧。

如何定义一个指针呢?

int* pa=nullptr;一般用这种表达式来定义指针,指针的变量开头一般为p,也就是pointer的简写形式,而空指针一般使用NULL来定义,区分于整数型的0,表示一个空的指针。

pa=&a;表示为取变量a在内存中的地址符,表示为变量。通过指针可以快速的找到赋值变量在内存中的位置,并对其进行操作。

无论用何种变量来定义指针,指针在内存中均占用4字节。另外*的含义是间接引用,只能作用于地址。

然后,当指针指向的是一个数组时,指针的用法与数组相同。例如

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

int* pa=NULL;

pa=arr;

pa[3]=300;//通过监视窗口可以发现,数组中的第三个元素被变成了300。

当然,也可以同时定义多个指针指向同一地址。在多重定义的情况下,地址的变量以最后定义的指针值为准。

例如:int a[3]={1,2,3};

int* pa=NULL;

int* pb=NULL;

pa=a[3];

pb=a[3];

pa[1]=5;

pb[1]=10;//通过监视可以发现,数组中a[1]的值变成了10。

最后介绍下指针的运算:

指针可以进行加减的运算,但不可以进行乘除的运算。

例如:int a[]={1,2,3,4,5,6};

int* pa=a;

pa+=1;//这样表示指针向后跨越了一个元素。即:*pa=&a[1]。

可以看出,指针一开始指定的是a[0]的地址符,通过加法运算,移动到a[1]的地址符了。

两指针之间相互运算时,不可以相加,但可以相减,通过相减的办法,可以算出,两指针直接有多少个元素。

例如:int a[]={1,2,3,4,5,6};

int* pa=a;

int* pb=&a[5];

pb-pa;//通过监视窗口发现,这个值等于5,表示pb与pa之间相隔了5个元素。

我们数一下发现这5个元素应该是a[0],a[1],a[2],a[3],a[4]。那么,我们如何输出这5个元素呢?

当然需要我们的for循环来解决了。(while也可以,但是感觉for比较方便解释)

例:for(pa=&a[0];*pa!=a[5];*pa++)

{printf("%d",*pa);}

首先定义一下指针pa在a[0]处的地址符,然后设定条件pa的值(*pa)不等于a[5],最后设定循环办法为*pa++,指针的值递增。

这样可以循环出a[0]到a[4]的值,当然,如果愿意的话,可以从a[1]~a[3]之间各个地址开始输出,分别得到不同的pa值而已。但是记住,指针之间做减法时,一定要用靠后的地址减去考前的地址,这样才能得出一个正确的结果。

猜你喜欢

转载自blog.csdn.net/gkht007/article/details/79867962