指针

指针

①:

int a=10;

int b=20;

 指针

指针就是地址,地址就是指针。//******指针 == 地址******

这里a的地址为10000(虚设),这里b的地址为20000(虚设)。你可以将指针当成名牌号,也可以当成一个人的身份证,独一无二,生活中可能不经常用,可它实实在在存在着,我们可以通过这个独一无二的身份证找到本人。

 

②:

int *    表示后面的变量为整形指针变量。

int *p;   表示变量P是个整形指针变量,可以存放地址。

 

③:

&a//a的地址(指针)。

 

int *p=&a;//定义变量P为指针变量并将a的地址传给指针变量P

*p=100;//P解引用为a,并将100赋值给a

p=&b;//再将b的地址传给指针变量P

*p=200;//P解引用为b,并将200赋值b

 指针

 

 

④:

* :学名间接访问符,一般叫做解引用。

*的三种用法:

一:乘号 *

二:int * p   说明变量P是一个指针变量

三:*p      解引用指针P

 

指针变量p就比普通变量多了一个解引用 *p

 

⑤:

指针的大小

64位平台,下面程序执行的结果

x86或者32位平台,指针4字节

x64或者64位平台,指针8字节


 指针


这里我们可以通过一道题加深一下对指针的印象。

之前我们最开始都做过一个简单的题目,定义ab的值,并交换ab的值。

简单的方法就是设一个临时变量tmp,再交换就好。

现在我们学习了指针,我们就用指针来解决这个题。

①:

首先我们用之前的方法设一个临时指针变量tmp

 指针

 

这里结果都是20,不是我们所想要的结果。

//

调试之后发现在 Swap函数内执行完第3步时候 *tmp*p1*p2全部都变成了20

这才发现第一步定义指针tmp时初始化错了。

 

②:

这次改之后结果如下:

 指针

这次我们设想的很好,将p1解引用后赋值给临时指针变量tmp解引用。

可是发现出现了程序崩溃。

调试之后发现出现了野指针,也就是悬挂指针,这里的指针变量tmp就是一个野指针。

我们删掉野指针tmp,设一个整形变量tmp

 

③:

这次改之后结果如下:

 指针

 

这次直接设临时变量tmp保存a的值,问题就解决了。