这是一道C语言考试题,希望能说出具体原因

有以下程序
main()
{ int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2) s+=*(t+i);
printf("%d\",s); }
这一题我还有点不明白的是s+=*(t+i)这一步是说s是一个指针还是具体就是一个数如果是指向的一个数的话好像指到最后会超出范围,式中的t是指数组中的第一个元素还是指什么?请一步一步地话化我看一下,谢谢
A 45
B 20
C 25
D 36

在这里t是一个地址,是那个{1,2,3,4,5,6,7,8,9};数组的首地址,也就是说t自己指向1的那个位置

(t+i)则表示的是从t开始偏移i个数字的地址比如i是2,那么从数组中的第一个数字1开始偏移两个数字,因此(t+2)指向数字3

*(t+i)则是取(t+i)这个地址的值所以 *(t+2) 等于3

在for循环中i分别等于0 2 4 6 8,因此(t+i)分别指向1 3 5 7 9,不会超出范围

所以最后s等于1+3+5+7+9=25
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-04
选C
i=0 s=s+t[0] s=0+1=1
i=2 s=s+t[2] s=1+3=4
i=4 s=s+t[4] s=4+5=9
i=6 s=s+t[6] s=9+7=16
i=8 s=s+t[8] s=16+9=25
第2个回答  2010-02-04
25
i分别是0、2、4、6、8
对应的*(t+i)就是1+3+5+7+9 = 25
相似回答