vs2010下输出11,10.不过导致输出结果不同的原因是什么?

#include <iostream>using namespace std;int main(){	int a,b;
	a=5;
	a=a+(a++);
	cout<<a<<endl;
	a=5;
	b=a+(a++);
	cout<<b<<endl;	return 0;
}

求一个详细的解释


心有法竹
浏览 229回答 2
2回答

一只甜甜圈

#include&nbsp;<iostream>using&nbsp;namespace&nbsp;std;int&nbsp;main(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a,b; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=a+(a++); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<a<<endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=5; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b=a+(a++); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<b<<endl; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout<<a<<endl;&nbsp;//&nbsp;你觉得这行还会输出&nbsp;5&nbsp;么&nbsp;..? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0; }代码解释一切 ...

牧羊人nacy

自加运算在不同的语言里会有不一样的解释,你在java中就会发现两个都是10,我觉得这个挺误导人的,python、go中都没有这个了,没啥意义。C里面的这个,我觉得可以理解成那个++运算发生在赋值运算之后,而java中发生在赋值运算之前,所以被赋值运算覆盖了。我真的闲的狠,看了一下代码(砍掉无关的,只留下这段计算): movq %rsi,&nbsp;%rax movl %edi,&nbsp;%ecx movl %ecx,&nbsp;-4(%rbp) movq %rax,&nbsp;-16(%rbp) movl $5,&nbsp;-28(%rbp) movl -28(%rbp),&nbsp;%eax movl -28(%rbp),&nbsp;%ecx addl %ecx,&nbsp;%eax movl %eax,&nbsp;-28(%rbp) movl -28(%rbp),&nbsp;%eax addl $1,&nbsp;%eax movl %eax,&nbsp;-28(%rbp) movl -28(%rbp),&nbsp;%eax xorb %cl,&nbsp;%cl leaq L_.str(%rip),&nbsp;%rdx movq %rdx,&nbsp;%rdi movl %eax,&nbsp;%esi movb %cl,&nbsp;%al callq _printf movl $5,&nbsp;-28(%rbp) movl -28(%rbp),&nbsp;%ecx movl -28(%rbp),&nbsp;%edx addl %edx,&nbsp;%ecx movl %ecx,&nbsp;-32(%rbp) movl -28(%rbp),&nbsp;%ecx addl $1,&nbsp;%ecx movl %ecx,&nbsp;-28(%rbp) movl -32(%rbp),&nbsp;%ecx xorb %dl,&nbsp;%dl leaq L_.str1(%rip),&nbsp;%rdi movl %ecx,&nbsp;%esi movb %dl,&nbsp;%al callq _printf movl $0,&nbsp;-24(%rbp) movl -24(%rbp),&nbsp;%eax movl %eax,&nbsp;-20(%rbp) movl -20(%rbp),&nbsp;%eax addq $32,&nbsp;%rsp popq %rbp ret第一个算式中加1操作在这里: movl -28(%rbp),&nbsp;%eax addl $1,&nbsp;%eax movl %eax,&nbsp;-28(%rbp)从开头就能看到-28(%rbp)就是变量a的内存位置第二个算式中加1操作在这里: movl -28(%rbp),&nbsp;%ecx addl $1,&nbsp;%ecx movl %ecx,&nbsp;-28(%rbp)而变量b的地址是-32(%rbp),当然不会被这个加1操作影响了
打开App,查看更多内容
随时随地看视频慕课网APP