今天看书《C++高级语言程序设计》(徐惠民)的书中关于指针的指针作为函数的参数一节,对指针有了更深层次的感悟,记录。
要点1:解引用符*的作用,把它放在一个地址的左边,可以取得这个地址内存放的值。
要点2:指针就是存放地址的变量,可以简单的理解为:指针就是一个地址。
要点3: int a=10; int *pa=&a; 如何理解?假如:a的地址为0x2000,那么指针pa内存放的值为0x2000,但指针本身的地址并不是这个,假设为指针pa的地址为0x1000。如果我想获得a内存放的值,也就是0x2000内存放的值,那么我根据要点1,得出: *0x2000 ,当然这么写你会的到一个语法错误,因为你提前并不指定a会存到那个地址,我们要获得地址,必须使用取地址符号&,也就是&a来获得a的地址。那么,我获得a的地址就变成 *&a ,这样写是完全正确的。那么,指针pa的地址,也可以用&获得 &pa ,最后:
&pa //获得指针pa的地址 *&pa //获得pa内存放的值,也是一个地址 **&pa //获得pa存放的地址内的值,也就是pa指向的地址的值 **&pa和*pa的计算结果相同,观察下面的计算: [vagrant@bio ~]$ cat t1.cpp #include <cstdio> int main(int argc, char *argv[]) { int a=10,*pa=&a; printf("a=%d,*pa=%d,**&pa=%d ",a,*pa,**&pa); return 0; } [vagrant@bio ~]$ ./t1 a=10,*pa=10,**&pa=10