C计算求救!

来源:百度知道 编辑:UC知道 时间:2024/06/20 13:22:55
#include <stdio.h>
main()
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf("%d\n",y);
}

这个为什么等于19?

因为p=&a[1],所以一开始p指针指向第二个数组元素a[1](因为第一个数组元素是a[0]),即*p=a[1]=4.

for(x=0;x<3;x++)
y+=*(p+x);
循环时,
第一次x=0,y=y+*(p+0)=1+4=5.
第二次x=1,y=y+*(p+1)=5+a[2]=5+6=11.(因为*(p+x)指的是int型p指针向右移动x个int型长度,即2个字节长,这是p指针指向了a[2],但p指针未移动,仍指向a[1]的首地址)
第三次x=2,y=y+*(p+2)=11+a[3]=11+8=19.
x=3时循环结束。

故输出结果就是19.