黑马程序员技术交流社区
标题:
基础测试的填空题存在多解
[打印本页]
作者:
alanwangke213
时间:
2015-8-3 13:30
标题:
基础测试的填空题存在多解
我的基础测试中有个题目这样的
#include<stdio.h>
int mian(void){
int a =5;
int b;
b = (++a)+(a++);
printf("%d %d"a,b);
return 0;
}
可是结果却存在两种,一种是12 7,一种是13 7.我是做底层的,我的ubuntu 和 CentOS都是13 7.可是用C的理解却是12 7.
所以这题目有两种答案
作者:
Eil.tea
时间:
2015-8-3 14:08
这是C语言,你就按照C语言的做不就行了。
作者:
wowthe1st
时间:
2015-8-3 15:03
恩,不同编译器编译顺序不一样,有的从右到左,有的从左到右吧,我记得大学有说过;
不过这样来说的话,两种答案不是应该要么7 12(从左往右) 要么 7 11(右到左)么?
13是从哪种方式来分析的?麻烦帮忙分析下,难道是有的编译器后++不是在语句结束后执行+1的?
13的话我感觉只有赋值前就把后++给+1了才会出现啊
作者:
alanwangke213
时间:
2015-8-3 17:06
wowthe1st 发表于 2015-8-3 15:03
恩,不同编译器编译顺序不一样,有的从右到左,有的从左到右吧,我记得大学有说过;
不过这样来说的话,两 ...
有的编译器版本会有这个现象:
表达式b = (++a)+(a++);中前面括号和后面括号分别为两个运算
++a和a++的运算描述是在语句执行前和语句执行后分别自加1;
编译器从左到右
ldr r0 ,#5 ;将r0存放a的值
ldr r1 ,#0 ;将r1存放b的值,不一定是0,初始值假设为0
add r0,r0 ,#1 ;++a
//而(a++)的括号里面是一个a ++;的运算。
‘(’入栈
mov r2 ,r0 ;a的值存在r2中 也就是6
‘)’出栈
add r0 ,r0 ,#1 ; 执行后++
mov r2,r0 ;将r0付给r2
add r1 ,r0 , r2 ; r1 = 6 + 7 =13
作者:
馒头爱财
时间:
2015-8-3 17:28
正解:7 12
作者:
魔尊
时间:
2015-8-3 18:20
为什么Ubuntu和CentOS是13 7 可以给解释一下吗?
作者:
QQ2544
时间:
2015-8-3 20:04
从右往左应该是7和12吧
作者:
Northcity
时间:
2015-8-3 21:10
这个区分系统和编译器, 搞IOS 当然在Xcode上,不必纠结一些不必要东西
作者:
阿伦666
时间:
2015-8-3 22:05
应该是7和12吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2