首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言 ++ - 有关问题

2012-03-16 
C语言++ -- 问题C语言问题: int a5 printf(“%d \n”, a++ + a--); 结果为啥是12 a5 本应该a--的优先级高

C语言 ++ -- 问题
C语言问题: int a=5; printf(“%d \n”, a++ + a--); 结果为啥是12 a=5 本应该a--的优先级高啊

[解决办法]
编译器不同结果可能出现偏差
[解决办法]
dev c++上是10。。。
[解决办法]

探讨
printf(“%d \n”, ++a + a--); 这是个面试题 呵呵 啥时候需要考虑到 ++/-- 后缀优先级高于前缀

[解决办法]
加个括号吧,弄得写的人自己都不知道谁前谁后的,不累么
[解决办法]
VS2008 C++:

10

确实没必要写这种东西。。。
[解决办法]
VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

不要写连自己也预测不了结果的代码!

[解决办法]
这优先级 可是 编译器来定的。
[解决办法]
面试出这种题目有两种可能:1。出题的是菜鸟。2。如果你说了答案(任何),则这道题不得分。
正确的答案是:it depends.
[解决办法]
不要写连自己都预测不了结果的代码!

如果这是老师出的题,可以无视你们老师了
如果这是书上的,换本好书看吧
如果这是面试题,就算给你offer,也千万别去,你想想,如果他们公司的人都这样写代码,然后你恰好需要维护这样的代码,然后。。。
[解决办法]
书上写明了啊!谭哥用的是turbo c++,学校用的是vc++,编译环境不一样!
[解决办法]
这个结果和编译有关,不同的编译器有不同的结果。
[解决办法]
vs2005:

Assembly code
    int i = 10;004113DE C7 45 F8 0A 00 00 00 mov         dword ptr [i],0Ah     printf("%d", i+++i--);004113E5 8B 45 F8         mov         eax,dword ptr [i] 004113E8 03 45 F8         add         eax,dword ptr [i] 004113EB 89 85 30 FF FF FF mov         dword ptr [ebp-0D0h],eax 004113F1 8B 4D F8         mov         ecx,dword ptr [i] 004113F4 83 E9 01         sub         ecx,1 004113F7 89 4D F8         mov         dword ptr [i],ecx 004113FA 8B 55 F8         mov         edx,dword ptr [i] 004113FD 83 C2 01         add         edx,1 00411400 89 55 F8         mov         dword ptr [i],edx 00411403 8B F4            mov         esi,esp 00411405 8B 85 30 FF FF FF mov         eax,dword ptr [ebp-0D0h] 0041140B 50               push        eax  0041140C 68 3C 57 41 00   push        offset string "%d" (41573Ch) 00411411 FF 15 D0 82 41 00 call        dword ptr [__imp__printf (4182D0h)] 00411417 83 C4 08         add         esp,8 0041141A 3B F4            cmp         esi,esp 0041141C E8 2E FD FF FF   call        @ILT+330(__RTC_CheckEsp) (41114Fh)
[解决办法]
如果完全按优先级来 应该是10 但是 编译器不同 结果会不同 
如果写代码 请不要写这样以来编译器的
[解决办法]
C/C++ code
int main(void){    int a=5;    printf("%d \n", a++ + a--);}
[解决办法]
运行了下这个就更纠结了(我用的是gcc):

printf ("%d,%d\n", --c, --c);

输出的居然是3,3(3,4或4,3我都能接受输出3,3实在是不知道编辑器是怎么在搞的了)

楼主的题目是不是打错了和在7楼上的不同
[解决办法]
先代入哪个a,这个跟优先级,左右顺序无关。

[解决办法]
未定义行为~~
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?57871
[解决办法]
很想知道出现a++ + a--这样代码的几率是多大
[解决办法]
不要去纠结这样的东西了,编译器不一样,导致的结果也不一样,
再说了不赞成写成这样的代码
[解决办法]
-- ++ 的太折磨人,写点大家都一致的代码

热点排行