int a[5],i,*p;
for(i=0;i<=4;i++)
a[i]=5-i;
p=a;
for(i=0;i<3;i++,p++)
printf("%4d",p[i]);
答案为什么是 5 3 1
printf("%4d",p[i]);改为printf("%4d",*p) 答案为什么又是5 4 3了,求高手看看!谢谢了 !
请仔细看了
int a[5],i,*p;
for(i=0;i<=4;i++)
a[i]=5-i;
p=a;
这些语句执行后是a数组{5,4,3,2,1} p指向a[0] (a[0]的值为5)
下面是主要的
for(i=0;i<3;i++,p++)
printf("%4d",p[i]);
1. 一开始i=0, p是a[0]的地址 (a[0]的值为5) p[i]就是a[0]这个地址往后移i (即0)个存储单位后的存储单位的值,所以是a[0]的值5。
2.然后i=1了 p是a[1]的地址 p[i]就是a[1]这个地址往后移i (即1)个存储单位后的存储单位的值,所以是a[2]的值3。
3.然后i=2了 p是a[2]的地址
p[i]就是a[2]这个地址往后移i (即2)个存储单位后的存储单位的值,所以是a[4]的值1。
4.i=3 退出循环。
如果改为printf("%4d",*p)则p不后移的值,所以是5,4,3