c问题,指针?

来源:百度知道 编辑:UC知道 时间:2024/05/22 23:46:45
int a[]={2,4,6,8};
main()
{int i,*p=a;
for(i=1;i<4;i++)
a[i]=*p++;
printf("%d",a[2]);}
请问大侠 结果为什么是2?
可以详细解下每一部吗?

for(i=1;i<4;i++)
a[i]=*p++;
主要是这个循环了
第一次循环,a[1] = *p, *p指向a的首址即a[0], 所以a[1] == 2
第二次循环,a[2] = *p, *p指向a[1] (因为在上一次循环中进行了自加), 所以a[2] == 2
......

不仅a[2],a[0],a[1],a[3]都=2
把指针换成数组比较好理解一点
for(i=1;i<4;i++) a[i]=*p++;
-->
for(i=1;i<4;i++) a[i]=*(p+i-1);
--->
for(i=1;i<4;i++) a[i]=a[i-1];//a[3]=a[2]=a[1]=a[0]=2

关键在于这里啦:a[i]=*p++
p指向的是a,这就相当于指向a的首地址,就是a[0]
那么*p的值当然会是2
然后关于“++”自增,++放在*p后的话是使将*p的值先赋给“=”左边的变量,然后再自增。
所以a[1]=2++
a[2]=3++
a[3]=4++

所以a[2]应该为3,你原先的答案本来就错了