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。
&:取地址
*:取值