指针
①:
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字节
这里我们可以通过一道题加深一下对指针的印象。
之前我们最开始都做过一个简单的题目,定义a和b的值,并交换a,b的值。
简单的方法就是设一个临时变量tmp,再交换就好。
现在我们学习了指针,我们就用指针来解决这个题。
①:
首先我们用之前的方法设一个临时指针变量tmp。
这里结果都是20,不是我们所想要的结果。
//错
调试之后发现在 Swap函数内执行完第3步时候 *tmp,*p1,*p2全部都变成了20。
这才发现第一步定义指针tmp时初始化错了。
②:
这次改之后结果如下:
这次我们设想的很好,将p1解引用后赋值给临时指针变量tmp解引用。
可是发现出现了程序崩溃。
调试之后发现出现了野指针,也就是悬挂指针,这里的指针变量tmp就是一个野指针。
我们删掉野指针tmp,设一个整形变量tmp。
③:
这次改之后结果如下:
这次直接设临时变量tmp保存a的值,问题就解决了。