鱼C论坛

 找回密码
 立即注册
查看: 1017|回复: 6

c语言自增自减问题

[复制链接]
发表于 2022-2-20 22:43:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
int main()
{
        int m = 8;
        printf("%d\n%d\n%d\n%d\n", ++m, --m, m++, m--);

        system("pause");
}
结果是 8 8 7 8 我想的结果是8 7 7  8 也就是中间那个--m 那块不明白为什么是8 而不是--8 等于7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-21 07:28:31 From FishC Mobile | 显示全部楼层
走火入魔了,没人告诉你研究这些东西就是浪费时间吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-21 07:31:07 | 显示全部楼层
本帖最后由 jhq999 于 2022-2-21 08:17 编辑
   5:         printf("%d\n%d\n%d\n%d\n", ++m, --m, m++, m--);
00A81B75 8B 45 F8             mov         eax,dword ptr [m]  
00A81B78 89 85 30 FF FF FF    mov         dword ptr [ebp-0D0h],eax  ;dword ptr [ebp-0D0h]=8
00A81B7E 8B 4D F8             mov         ecx,dword ptr [m]  
00A81B81 83 E9 01             sub         ecx,1  
00A81B84 89 4D F8             mov         dword ptr [m],ecx  
00A81B87 8B 55 F8             mov         edx,dword ptr [m]  
00A81B8A 89 95 2C FF FF FF    mov         dword ptr [ebp-0D4h],edx   ; dword ptr [ebp-0D4h]=7
00A81B90 8B 45 F8             mov         eax,dword ptr [m]  
00A81B93 83 C0 01             add         eax,1                          
00A81B96 89 45 F8             mov         dword ptr [m],eax                   ;dword ptr [m]=8
00A81B99 8B 4D F8             mov         ecx,dword ptr [m]      
00A81B9C 83 E9 01             sub         ecx,1  
00A81B9F 89 4D F8             mov         dword ptr [m],ecx                   ;dword ptr [m]=7
00A81BA2 8B 55 F8             mov         edx,dword ptr [m]  
00A81BA5 83 C2 01             add         edx,1  
00A81BA8 89 55 F8             mov         dword ptr [m],edx                    ; dword ptr [m]=8
00A81BAB 8B F4                mov         esi,esp  
00A81BAD 8B 85 30 FF FF FF    mov         eax,dword ptr [ebp-0D0h]  
00A81BB3 50                   push        eax                                               ;压入8
00A81BB4 8B 8D 2C FF FF FF    mov         ecx,dword ptr [ebp-0D4h]  
00A81BBA 51                   push        ecx                                               ;压入7        
00A81BBB 8B 55 F8             mov         edx,dword ptr [m]  
00A81BBE 52                   push        edx                                               ;压入8
00A81BBF 8B 45 F8             mov         eax,dword ptr [m]  
00A81BC2 50                   push        eax                                               ;压入8
00A81BC3 68 58 88 A8 00       push        0A88858h  
00A81BC8 FF 15 4C C3 A8 00    call        dword ptr ds:[0A8C34Ch]  
作为参数从右向左,遇到后缀自增自减先把m值存储起来后自增自减,所以后两个参数是8和7,遇到前缀自增自减先自增自减直到最后把m值做参数传入函数,所以7+1,8-1,7+1,最后m=8,做为前两个参数的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-21 09:44:27 | 显示全部楼层
好像自增和自减的顺序和编译器有关,每个编译器的处理顺序有些许不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-21 10:26:05 | 显示全部楼层
引用楼上,所以这样的问题只是浪费时间,为了少出BUG,莫装逼,分解成单步,或者多声明点变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-23 10:56:24 | 显示全部楼层
jhq999 发表于 2022-2-21 10:26
引用楼上,所以这样的问题只是浪费时间,为了少出BUG,莫装逼,分解成单步,或者多声明点变量

没有 主要做题看到这种题,看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-23 11:11:57 | 显示全部楼层
ljy5011 发表于 2022-2-23 10:56
没有 主要做题看到这种题,看不懂

所以要现实中尽量单步,或者多声明变量来实现,因为有时编译器不一样,出来的结果也不一样,了解就好不要钻牛角尖,这种题我理解就是让你知道,函数参数的顺序从右到左
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表