C语言中的i++和++i的问题

来源:百度知道 编辑:UC知道 时间:2024/06/24 04:22:48
在vc6.0下为什么以下代码的输出值为:16怎么算出来的。我觉的应该为12,或15才对呀
int i=3;
int j=(++i)+(++i)+(++i);
printf("%d",j);

.file "tes.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "%d\12\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
andl $-16, %esp
movl $0, %eax
addl $15, %eax
addl $15, %eax
shrl $4, %eax
sall $4, %eax
movl %eax, -12(%ebp)
movl -12(%ebp), %eax
call __alloca
call ___main ;从这里开始看起
movl $3, -4(%ebp) ;为局部变量i分配空间并赋初值3
leal -4(%ebp), %eax
incl (%eax) ;i++
leal -4(%ebp), %eax
incl (%eax) ;i++ 可以看出首先i自增两次变为5
movl -4(%ebp), %eax
movl -4(%ebp), %edx
addl %eax, %edx ;5+5=10 保存在eax中
leal -4(%ebp), %eax
incl (%eax) ;i++ 这时候i自增为6
movl %edx, %eax
addl -4(%ebp), %eax ;10+6=16 保存在eax中
movl %eax, -8(%ebp) ;给变量j赋值,也即此时eax中的16
movl -8(%ebp), %eax<