指针的二值



 关于指针,我们有很多困惑,尤其是在使用时什么时候加*,什么时候不加*,都分别代表什么意思,在老师指导下,自己做了一些总计如下:



   按照我个人的理解指针的二值分别就是指指针存储的值指针指向的值,我们都知道,我们经常说的指针实际上是指指针变量,那么变量就有存储的指,只不过指针比较特殊,是用来存储地址的变量,这就是指针二值之一,既然指针变量存储了变量的地址,那么就可以通过存储的地址值就可以找到指向的值。是不是还是很凌乱不知所云,ok,那就让我们看看测试代码,*是用来声明指针的那么当声明了一级指针后,p就是指针变量的名字,代表一个空间,用来存储地址的变量,那么p就是指针变量存储的值,*p就是指向的值,对一级指针是这样,对多级指针以此类推。

如下图1:

wKioL1jDxeXgU6ztAAThag5uYXs664.png-wh_50
当声明了普通变量 a,b,并分别赋值10和100;打印输出后的结果就是第一行,这个没有任何疑问吧?

接着我们在程序的开头分别声明了两个一级指针和二级指针,按照我的理解,一级指针是用来存地址的,那么当要存储一级指针时就要用二级指针来接受,好了言归正传,我们接着把a,b的地址赋值给指针变量i,j打印输出的结果  i=17823864   j=17823852 对这个结果是不是很怪,ok,其实这个结果在预计范围之内,也印着了我说的i j代表的是存储的地址值,不信我们看一下那个十进制数对应的十六进制数是否和a和b的地址值相等。如图2

当我们给ij加上*后输出结果如图1的第三行,对于二级指针同样如此,来我们一起看输出结果的第四行,按照我前边说的,*p是指p存储的地址所保存的值,对吧?对于二级指针p,保存的一级指针i的地址,那么i内部的值又是保存的a的地址,也就对应了a的地址,对于**p,p保存了i'的地址,*p指p指向的值也就是i保存的地址值,那么**p就是在*p的基础上指向的值,也就是指i指向的值,即就是a。



   所以对于指针变量来说当不加*时就是指针变量本身存储的值,加上*时代表指针变量指向的值!