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 为啥? 展开
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 为啥? 展开
4个回答
展开全部
正确答案应该是C)p1=x+2,*(p1++)。
因为:p1=x+2使p1指向x是的2,而*(p1++)由于++是后增1符,就被编译器解释为先取内容*p1,再做p1增1运算。所以*(p1++)取出的值仍然是2,然后才做p1++使p1指向3。而其他的选项都操作了3这个值,因而不是正确选项。
因为:p1=x+2使p1指向x是的2,而*(p1++)由于++是后增1符,就被编译器解释为先取内容*p1,再做p1增1运算。所以*(p1++)取出的值仍然是2,然后才做p1++使p1指向3。而其他的选项都操作了3这个值,因而不是正确选项。
追问
那括号没有用吗? 他的优先级不是高于*么?
追答
由于++的优先级比*高一些,所以括号是没有用的,哈哈……
正因为++的优先级高于*,所以括号才没有用!不管括不括起来,++是后置运算符,必须得等运算完了才执行,这是前置、后置的执行原则。
展开全部
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运行测试,此题容易混淆
逗号运算表达式,
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运行测试,此题容易混淆
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
d
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询