指针的指针

1 int val1,val2,val3;
2 
3 int *p1 = &Val1;
4 
5 int *p2 = &val2;
6 
7 int *p3 = &val3;

使用指针的指针:

1 int **pp1 = &p1;
2 
3 int **pp2 = &p2;
4 
5 Int **pp3 = &p3;

对于int **pp1 = &p1; 我们可以理解成取得p1的地址赋值给指针pp1,*pp1就是p1,**pp1就是val1。用下面的图来表示就是:

 

 

现在改写 *pp1 = p2 ,就是将p2存放的地址赋值给了p1,现在p1指向的地址为val2的值,所以现在int num= *p1,num就等于6。 

指针存放的是对象在内存中的地址。

&是取地址,意思是返回当前对象在内存的中的地址

*是取值,意思是返回一个指针所指向的对象,如果当前指针保存的是一个内存地址,那么*就返回这个内存地址所对应的对象

所以当*pp1 = p2,就是返回pp1所指向的对象p1,然后将p2指向的地址赋值给p1,那么p1这个指针所指向的对象就变成了val2。

&:取地址

*:取值

 

posted @ 2019-03-04 22:31  leoncumt  阅读(426)  评论(0编辑  收藏  举报