C语言中*(p++)

13.()Forfollowingdeclaration,whichexpressionwillnotresultin3?intx[10]={0,1,2,3,4,5,6,... 13. ( )For following declaration, which expression will not result in 3 ?
int x[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, *p1 ;
A) x[3] B) p1 = x +3, *p1++
C) p1 = x +2, *( p1++ ) D) p1 = x +2, *++p1

是不是选C 为啥?
展开
 我来答
White_MouseYBZ
2012-01-07 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6655万
展开全部
正确答案应该是C)p1=x+2,*(p1++)。
因为:p1=x+2使p1指向x是的2,而*(p1++)由于++是后增1符,就被编译器解释为先取内容*p1,再做p1增1运算。所以*(p1++)取出的值仍然是2,然后才做p1++使p1指向3。而其他的选项都操作了3这个值,因而不是正确选项。
追问
那括号没有用吗? 他的优先级不是高于*么?
追答
由于++的优先级比*高一些,所以括号是没有用的,哈哈……
正因为++的优先级高于*,所以括号才没有用!不管括不括起来,++是后置运算符,必须得等运算完了才执行,这是前置、后置的执行原则。
疑问太多的人
2012-01-07 · TA获得超过301个赞
知道答主
回答量:183
采纳率:0%
帮助的人:107万
展开全部
B
逗号运算表达式,
p1 = x+3,*p1++;
p1 = x[3], x[3]++;
p1 = 3+1 = 4;

C和D其实是一样
p1 = x +2, *( p1++ );//x[2],地址都指向x[3]
p1 = x +2, *++p1;

坦白说,已在VC++6.0运行测试,此题容易混淆
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d0a77945f
2018-07-14
知道答主
回答量:1
采纳率:0%
帮助的人:851
展开全部

实践过后发现答案是这样的

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
grace7438
2012-01-07 · TA获得超过605个赞
知道答主
回答量:72
采纳率:0%
帮助的人:24.8万
展开全部
d
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式