一道C语言题求详解过程

有如下数组定义语句“char s[]=“abcd” ”; 则下列语句执行后的输出结果是( )。
char *p=s;
while(*p)
p++; for(p--;p-s>=0;p--)
puts(p);
A. abcdbcdcdd B. abcd C. dcdbcdabcd D. dcba

选C有图有真相

数组s有5个char类型大小的空间,分别存放着a,b,c,d,\0;

字符指针p初始指向s数组的第一个字符a;

while循环,开始p指向的是a,非零执行循环体使得p指向下一个字符b;

直到p指向最后一个\0的时候跳出while循环\0是转义字符表示NULL其整数值就是零;

开始for循环,指针P先倒退一个指向d,puts函数将以d开头的字符串输出并换行;

指针在倒退一个指向c,puts函数将以c开头的字符串输出;

直到P的地址不在大于S的地址为止,即p指向数组的首地址S 的时候,也是P指向a 的时候;

最后一次将以a开头的字符串输出;

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-02-17
“char s[]=“abcd”这行实际上在内存中”abcd“后面还有一个结束符‘\0’

while(*p)

p++;
这句代码将的意思是指针p不断自加,直至指向'\0'跳出。此时p指向的是字符串”abcd“的下一个字节。
for(p--;p-s>=0;p--)
puts(p);
这句代码首先将p自减,于是p指向了‘d’。puts(p)后打印d
下一次p再次自减1,指向‘c’。puts(p)打印到‘\0’结束,打印cd
后面不断循环,依次打印bcd和abcd
此时p指向‘a’,下一次循环p自减,位置相对数组s靠前,p-s<0,跳出循环,函数结束。
第2个回答  2013-02-17

答案是C.

执行完while循环后指针p指向s[3]下一内存单元,for循环执行p--语句后p指向s[3]

第一次循环:p-s=3>0为真,由于此时p指向s[3],所以输出为d,再执行p--,指针p指向了s[2]

第二次循环:p-s=2>0为真,此时p指向s[2],输出为cd

同理第三次循环输出bcd,第四次循环输出abcd

第3个回答  2013-02-17
选C
*p =s ,S数组的首地址赋给p, while(*p) 取地址的内容并判断是否为字符结尾,p++ 指针自加,最后指向字符'd'的地址。
s的地址是字符型,p指针的地址也是字符型,可以相减。for(p--;p-s>=0;p--) 循环使指针从 字符‘d’ 的位置开始,变到'c', 再到'b', puts(p),输出地址后面的字符串。共四个循环
相似回答
大家正在搜