张世来4610484 发表于 2020-2-11 14:06:11

自增

想问下q的值不应该是24吗 ,为什么是22,求指点

zltzlt 发表于 2020-2-11 14:10:32

编译器问题,每个编译器可能得到的值都不一样。

367 发表于 2020-2-11 14:48:21

你的程序我运行了一下,运行结果为18,22,8,8
在我看来,p=5+6+7=18;
q=6+7+8=21;
可是不理解为什么q=22

1261509571 发表于 2020-2-11 15:24:37

看c语言课本(蓝色皮)的27页上边有 编译器问题

4goodworld 发表于 2020-2-11 15:32:27

0040DF9F C7 45 F8 05 00 00 00 mov         dword ptr ,5    //ebp-8=5
17:       q=(++j)+(++j)+(++j);
0040DFCD 8B 4D F8             mov         ecx,dword ptr //ecx=5
0040DFD0 83 C1 01             add         ecx,1                  //ecx=5+1=6
0040DFD3 89 4D F8             mov         dword ptr ,ecx//ebp-8=6
0040DFD6 8B 55 F8             mov         edx,dword ptr    //edx=6
0040DFD9 83 C2 01             add         edx,1                   //edx=6+1=7
0040DFDC 89 55 F8             mov         dword ptr ,edx   //ebp-8=7
0040DFDF 8B 45 F8             mov         eax,dword ptr    //eax=7
0040DFE2 03 45 F8             add         eax,dword ptr    //eax=7+7=14
0040DFE5 8B 4D F8             mov         ecx,dword ptr    //ecx=7
0040DFE8 83 C1 01             add         ecx,1                   //ecx=7+1=8
0040DFEB 89 4D F8             mov         dword ptr ,ecx   //ebp-8=8
0040DFEE 03 45 F8             add         eax,dword ptr    //eax=14+8=22
0040DFF1 89 45 F0             mov         dword ptr ,eax //ebp-10h=22
你看下汇编就知道情况了,问题在与前两个相加的时候,是用7+7,其实这个计算式最后的结果就是q=j+j+j
只是j的值不一样

Croper 发表于 2020-2-11 16:39:37

都不会搜索么https://fishc.com.cn/thread-152900-1-1.html
https://fishc.com.cn/thread-132932-1-1.html

王逗比666 发表于 2020-2-11 17:27:13

你看的旧课吧,这个代码好像语法不规范,所以编译器得到的答案不一样,还是看新课吧

张世来4610484 发表于 2020-2-11 21:36:10

367 发表于 2020-2-11 14:48
你的程序我运行了一下,运行结果为18,22,8,8
在我看来,p=5+6+7=18;
q=6+7+8=21;


你这脑回路和我差的有点多

张世来4610484 发表于 2020-2-11 21:37:07

4goodworld 发表于 2020-2-11 15:32
你看下汇编就知道情况了,问题在与前两个相加的时候,是用7+7,其实这个计算式最后的结果就是q=j+j+j
只 ...

哥,我还没学汇编,看的不太懂,能解释更详细点吗

张世来4610484 发表于 2020-2-11 21:38:48

王逗比666 发表于 2020-2-11 17:27
你看的旧课吧,这个代码好像语法不规范,所以编译器得到的答案不一样,还是看新课吧

我两个都在看,希望理解更深点

王逗比666 发表于 2020-2-11 23:12:44

张世来4610484 发表于 2020-2-11 21:38
我两个都在看,希望理解更深点

因为旧课的参考教材是《C程序设计》这书放到现在看有些老了,一些东西不适合用在现在,如果你要两种一起学那么案例什么的要以新课为主,旧课用来加深概念映像

王逗比666 发表于 2020-2-11 23:14:22

张世来4610484 发表于 2020-2-11 21:38
我两个都在看,希望理解更深点

你的问题当时我也困惑过,后来了解了一下这个代码属于语法不规范,不要纠结,因为它是因为代码本身不正确而导致输出结果不同的

4goodworld 发表于 2020-2-12 00:02:51

张世来4610484 发表于 2020-2-11 21:37
哥,我还没学汇编,看的不太懂,能解释更详细点吗

ebp-8就是j
ebp-10h就是q
其他的你都看成变量得了
你看我注释部分,不就很清楚了吗?

Easen 发表于 2020-2-12 19:01:33

我的也有这个问题,解决不了
页: [1]
查看完整版本: 自增