问一道C语言题目

来源:百度知道 编辑:UC知道 时间:2024/05/29 23:40:34
main()
{
int x[8]={8,7,6,5,0},*s;
s=x+3;
printf(“%d\n”,s[2]);
}
这个输出是0,请问为什么是0啊? S[2]这个看不懂 明明是指针,前面的*号又没有, 怎么后面来了个数组?

首先:x[8]={8,7,6,5,0,0,0,0};省略的自动为0,补齐8个
s=x+3,那么s就指向了5,
s[2],那么从5向后数2个,那个位置的值是0.

x[8] = {8, 7, 6, 5, 0}
数组一共八个元素,但是只初始化了前五个,后面三个自动初始化为0
s = x + 3 相当于s指向5(这里x即x[0]的地址)
所以s[0] = 5 ; s[1] = 0 ; s[2] = 0 ;

呵呵,肯定是0呀
s=x+3;
这句看懂了么?
就相当与s指向x[2];
那么s[3]当然就是x[4]拉;
x[4]显然就是0么

太久不看这些东西,要好一会才看明白。
s=x+3(x默认为地址x[0]) 表示s(默认为s[0])等于x[3]的地址,那么s[2]自然就是x[5]的地址了。明白吗?