C语言选择题,求详解

以下程序的输出结果是()。main(){chars[]=“123”,*p;p=s;printf(“%c%c%c\n”,*p++,*p++,*p++);}A.123B.32... 以下程序的输出结果是()。
main()
{ char s[]=“123”,*p;
p=s;
printf(“%c%c%c\n”,*p++,*p++,*p++);
}
A.123 B.321 C.213 D.312
展开
 我来答
百度网友d344538ff
2019-01-11 · TA获得超过383个赞
知道小有建树答主
回答量:241
采纳率:70%
帮助的人:60.1万
展开全部

应该选B。

程序结果:

解析:

  1. *p 表示p是一个储存地址的变量

  2. 在这个程序中当运行完p=a;时,*p为"1",*p++也为"1"

  3. *p++和*(p++)相同

  4. printf的运行顺序是从左到右

  5. *p++是把*p存储的地址+1,而p的存储地址是数组的第一个,所以相当于把p的指针往后移一位,也就是说把p指向的数组的位置往后移一位。所以就是321

百度网友12ee0fd
2019-01-11 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:1965万
展开全部

答案就是A,说B的上个运行结果截图啊

后自增是先使用再增加。

p开始指向字符数组第一项 s[0]。

修改一下,编译器不同结果不同。

追问

怎么解释,题目后的答案写的也是B

追答
补了两个图,和编译器有关。
同是开源自由的clang和gcc编译的结果都不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
三天打鱼N
2019-01-11 · TA获得超过1540个赞
知道大有可为答主
回答量:2032
采纳率:74%
帮助的人:602万
展开全部

321 选B

p指向字符串s首地址

那个调用函数是从右到左执行的 所以先执行最右边的*p++ 得到1

函数的参数压栈是从右向左执行的……

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bj_jp996e49a
2019-01-11 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:78%
帮助的人:2625万
展开全部
数组指针没有任何变化,输出都是111。。
因为指针p是指向了第一个字符1,而%c是读入并打印出来一个字符。。而printf中*p意思是s[]第一个值,读入到打印函数,打印到屏幕完了然后把这个读入值+1,而数组指针值还是没有变的,总是指在1的位置。
可以用下面更改程序验证:把其中一个变成前++
#include<stdio.h>
main()
{ char s[]="123",*p;
p=s;
printf("%c,%c,%c\n",++*p,*p++,*p++);
}
++*p,读入数值+1·,最后结果是2,1,1。。说明*p只是第一个字符值,而原数组指针是没有变化的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Aufwachenr
2019-01-11
知道答主
回答量:10
采纳率:0%
帮助的人:2万
展开全部
答案:A.123
详解:首先题目定义了一个字符数组s,其中存放了字符串"123",随后定义了字符型指针p,并且使p指向字符串s.
之后,题目开始输出结果,注意输出方式*p++,这是本题关键所在,根据运算符结合顺序,先输出*p,也就是字符串第一个字符"1",之后执行p++,指针后移指向字符"2",之后的两次输出同理。
希望能帮助到你。
更多追问追答
追问
错了,答案是B,而且我运行了也是321,所以答案没错,但是不知道为什么是321
追答

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式