int main()
{
int a=10;
//指向变量a的指针
int *p=&a;
//指向指针p的指针
int **pp=&p;
//指向 指向指针的指针pp 的指针
int ***ppp=&pp;
//释放指针(指向空)
//p=NULL;或者p=0;
//*&p --相当于-- &*p
printf("1.&a=\t%p , &p=\t%p \n &pp=\t%p , &ppp=\t%p\n\n",
&a,&p,&pp,&ppp);
printf("2.&a=\t%p , &*p=\t%p \n &*pp=\t%p , &*ppp=\t%p\n\n",
&a,&*p,&*pp,&*ppp);
printf("3.&a=\t%p , &*p=\t\t%p \n &**pp=\t%p , &**ppp=\t%p\n\n",
&a,&*p,&**pp,&**ppp);
printf("4.&a=\t%p , &*p=\t\t%p \n &**pp=\t%p , &***ppp=\t%p\n\n",
&a,&*p,&**pp,&***ppp);
//pp中存放的是p的地址,而p中存放着a的地址,因此*pp == p == &*p == &a
printf("5.&a=\t%p , p=\t%p \n *&p=\t%p , *pp=\t%p \n "
+ "**ppp=\t%p\n\n",
&a,p,&*p,*pp,**ppp);
printf("6.a=\t%d , *p=\t%d \n **pp=\t%d , ***ppp=\t%d\n",
a,*p,**pp,***ppp);
}
输出结果
1.&a= 0x7fff560b6c2c , &p= 0x7fff560b6c20
&pp= 0x7fff560b6c18 , &ppp= 0x7fff560b6c10
2.&a= 0x7fff560b6c2c , &*p= 0x7fff560b6c2c
&*pp= 0x7fff560b6c20 , &*ppp= 0x7fff560b6c18
3.&a= 0x7fff560b6c2c , &*p= 0x7fff560b6c2c
&**pp= 0x7fff560b6c2c , &**ppp= 0x7fff560b6c20
4.&a= 0x7fff560b6c2c , &*p= 0x7fff560b6c2c
&**pp= 0x7fff560b6c2c , &***ppp= 0x7fff560b6c2c
5.&a= 0x7fff560b6c2c , p= 0x7fff560b6c2c
*&p= 0x7fff560b6c2c , *pp= 0x7fff560b6c2c
**ppp= 0x7fff560b6c2c
6.a= 10 , *p= 10
**pp= 10 , ***ppp= 10