关于指针变量的理解这样是否正确,自学C

有段程序如下:
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。

是这样的,没错。一般来说同类型的,同级的指针赋值给同级的指针就行了。如一级指针p=p+1;二级指针k=&k; 这是很重要的.二维数组a[3][4],比如 p1=&a[0][0];和p2=a;是不同级的p1+1== &a[0][1]; p2+1==&a[1] 跟a[1][0] 的首地址相同。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-27
指针 内存地址的标识 ,
仅仅是一个标识, 指针名是指向的内存区域的首地址。这句话理解了就行