C语言问题 假设 int i=2,k,则执行 k=(i++)+(++i)+(++i);语句后,i和k的值分别是?详细… 5
展开全部
++i是先使用后自加,i++是先自加后使用,所以i++得2,i变为3,++i得4,i变为4,++i得5,i为5,
k=2+4+5=11
k=2+4+5=11
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
~~这类问题实在没有多大的讨论意义
一是编译器对语句的解析并没有一个统一的标准
二是实际应用中,是不可能会出现这种语句的~
如果编译器是从左至右的解析语句的话
k=(i++)解析到这里的话,编译器就会形成两条指令
k=2+(++i)+(++i);
i=i+1;//当然也可能实际编译器并非如此解析~
继续
k=i+(++i)到这里又会形成如下指令
k=2+(2+1)+(++i);//i变成了3
i=i+1;
然后
k=2+2+1+(3+1);
i=i+1;
最后
k=9;
i=5;
显然这样的结果与大部分编译器都是不同的
也就是说这些编译器的解析规则并不是如此
总之,k的值最终还是要看具体编译器而定的~
一是编译器对语句的解析并没有一个统一的标准
二是实际应用中,是不可能会出现这种语句的~
如果编译器是从左至右的解析语句的话
k=(i++)解析到这里的话,编译器就会形成两条指令
k=2+(++i)+(++i);
i=i+1;//当然也可能实际编译器并非如此解析~
继续
k=i+(++i)到这里又会形成如下指令
k=2+(2+1)+(++i);//i变成了3
i=i+1;
然后
k=2+2+1+(3+1);
i=i+1;
最后
k=9;
i=5;
显然这样的结果与大部分编译器都是不同的
也就是说这些编译器的解析规则并不是如此
总之,k的值最终还是要看具体编译器而定的~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-01-15
展开全部
因为()的优先级高,所以先执行括号内的表达式,则,K=2+3+3=8,因为i++是先使用i的值,在加1,因此i=3+1=4;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询