有段程序如下:
int a[]={2,4,6,8};
int *p,**k;
printf("%d\n",*(p++));
printf("%d\n",**k);
假设a[0]的偏移地址是2010001,a[1]的偏移地址是2010002。当定义有int *p;系统就会为指针变量p划分一个存储单元,其偏移地址不可知(假设为0ff99bc)。再执行语句p=a;p这个变量存放的就是2010001,当执行printf("%d",*p);时,打印的就是“2”。
那么当定义了**k时,系统就会为指向指针变量的变量k划分一个存储单位,其偏移地址也不可知,再
执行语句k=&p;时,k存放的就是0ff99bc了。
p++之后,p存放的数据变为2010002,*p=*[2010002]=4。由于k=&p,执行*k时相当于执行*[0ff99bc],执行**k时相当于执行*(*[0ff99bc]),*(*[0ff99bc])=*[2010002]=4。