一道C语言题求详解过程

有如下数组定义语句“chars[]=“abcd””;则下列语句执行后的输出结果是()。char*p=s;while(*p)p++;for(p--;p-s>=0;p--)p... 有如下数组定义语句“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
展开
 我来答
806961063
2013-02-17 · 超过15用户采纳过TA的回答
知道答主
回答量:77
采纳率:20%
帮助的人:15.4万
展开全部

选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开头的字符串输出;

来自:求助得到的回答
reasontom
2013-02-17
知道答主
回答量:3
采纳率:0%
帮助的人:5098
展开全部
“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,跳出循环,函数结束。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
7无7言7
2013-02-17
知道答主
回答量:30
采纳率:0%
帮助的人:24万
展开全部

答案是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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yjj607b
2013-02-17
知道答主
回答量:1
采纳率:0%
帮助的人:1515
展开全部
选C
*p =s ,S数组的首地址赋给p, while(*p) 取地址的内容并判断是否为字符结尾,p++ 指针自加,最后指向字符'd'的地址。
s的地址是字符型,p指针的地址也是字符型,可以相减。for(p--;p-s>=0;p--) 循环使指针从 字符‘d’ 的位置开始,变到'c', 再到'b', puts(p),输出地址后面的字符串。共四个循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式