q=(++j)+(++j)+(++j);问题
本帖最后由 ℡.xiao敏 于 2012-3-20 21:41 编辑#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
}
编译出来的结果j=8 怎么q=22啊?实在想不明白,后来我直接用q=(++j)+(++j)来测试,结果是q=14,j=7这好像才符合逻辑啊、 q不是应该等于24吗 自己用反汇编看了下代码……
7: q=(++j)+(++j)+(++j);
0040D73D mov ecx,dword ptr
0040D740 add ecx,1
0040D743 mov dword ptr ,ecx
0040D746 mov edx,dword ptr
0040D749 add edx,1
0040D74C mov dword ptr ,edx
0040D74F mov eax,dword ptr
0040D752 add eax,dword ptr
0040D755 mov ecx,dword ptr
0040D758 add ecx,1
0040D75B mov dword ptr ,ecx
0040D75E add eax,dword ptr
0040D761 mov dword ptr ,eax
原来是第一个j和第二个j先自增1 2次之后相加了,再第三次自增1。。。这是vc的问题啊 我试过了,在visual studio 2010中运行是24.看了楼主的解释,豁然开朗啊。 说实话,纠结这些东西都是没有意义的,这些都不是规范的书写方法,除非你的目的就是写别人看不懂的程序。否则,千万不要写这种语句,最好的方法是吧 ++语句 与 赋值语句 分开来写
++j;
q=j; 我也是纠结这个问题....想不通...:Q 换个编译器 也许就能看到你想看到的24了 这个问题我也纠结着呢:Q 我感觉(++i )+( ++i )+ (++i)相当于
((++i)+(++i))+(++i) ℡.xiao敏 发表于 2012-3-20 21:23
q不是应该等于24吗
我为什么算的是21呢,大佬能说说吗?我想的是q=6+7+8=21,哈哈 这个问题是因为部分编译器的内部的表达式是使用的前缀式计算,会将((++j)+(++j))先计算了,然后在计算+ (++j)
页:
[1]