int var;
int* ptr;
int** pptr;
var = 3000;
/* 获取 var 的地址 */
ptr = &var;
/* 使用运算符 & 获取 ptr 的地址 */
pptr = &ptr;
/* 使用 pptr 获取值 */
printf("var = %dn", var);//3000
printf("var自身的地址:%dn", &var);//9829104
printf("ptr的值:%dn", ptr);//9829104
printf("*ptr = %dn", *ptr);//3000
printf("**pptr = %dn",**pptr);//3000
上方注释内容是运行的结果,由此可见,像&作用是取地址,这个 int* ptr,对于ptr它是一个指针变量,只能接受地址。
而*我把它理解为取值的作用,像*ptr取谁的值呢?取指针变量ptr指向的地址存放的值(3000),而**pptr可以这样看,我们先看一个*pptr,此时得到的是ptr的值(ptr的值是var的地址),然后再看*ptr(其实相当于**pptr),此时得到的是var的数值3000。
看图应该最好理解了。