这又是什么鬼?
#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);
}
程序运行得
18
22
8
8
可是我口算的结果为18,21,8,8
据说不同的编译器算出来的结果不一样,可以仔细讲解一下吗?
p=(i++)+(i++)+(i++);
5 + 6 + 7 = 18
p=(i++)+(i++)+(i++);
5 + 5 + 5 = 15
q=(++j)+(++j)+(++j);
8 + 8 + 8 = 24
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22
q = ( (++j) + (++j)) +(++j);
++j;
++j;
j变成了7
7 + 7 = 14
14 + (++j)
14 + 8 = 22 7:main.c **** q=(++j)+(++j)+(++j);
43 .loc 1 7 0
44 0048 83442428 addl $1, 40(%esp)
44 01
45 004d 83442428 addl $1, 40(%esp)
45 01
46 0052 8B442428 movl 40(%esp), %eax
47 0056 8D1400 leal (%eax,%eax), %edx
48 0059 83442428 addl $1, 40(%esp)
48 01
49 005e 8B442428 movl 40(%esp), %eax
50 0062 01D0 addl %edx, %eax
51 0064 89442420 movl %eax, 32(%esp) 试试这个?
#include<stdio.h>
int 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);
return 0;
} 人造人 发表于 2019-1-21 01:08
q=(++j)+(++j)+(++j);
7 + 7 + 8 = 22
也就是说只是编译器算法的问题,对吧 Logic-闫 发表于 2019-1-21 11:53
也就是说只是编译器算法的问题,对吧
嗯
页:
[1]