鱼C论坛

 找回密码
 立即注册
查看: 855|回复: 2

[技术交流] 浅析那些初学者头疼i++,i--,-i--等自增自减运算符

[复制链接]
发表于 2020-8-7 15:48:58 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 良弓无箭 于 2020-8-7 15:58 编辑

浅析那些初学者头疼i++,i--,-i--等自增自减运算符开篇问题:#include<stdio.h>
int main()
{
    int i = 8;
    printf("%d %d %d %d %d %d",++i,--i,i++,i--,-i++,-i--);
    return 0;
}
请小伙伴们观察并写出以上代码执行的结果。
根本原因:
自增自减运算符分为两类,分别是右值和左值。形如i++,i--,-i之类的便是右值,遇到右值会将递增前的i的值给记录下来,向前传递递增之后的值。形如--i,++i,i之类的便是左值。左值会直接向前传递递增之后的值,但并不会记录i的值,只记录i的地址,直到所有表达式出栈之后,在将i的最终值代入。编译器遇到右值会直接压栈,遇到左值则会把i的地址进行压栈。
开篇问题的解析:
printf函数里面从右向左进行压栈。


[/table]
最终i的值为8,依次出栈。所以从前到后依次输出:8,8,7,8,-7,-8.
注意:上文中记录i的值意思就是向栈中写入值。
以上就是令人头疼的自增自减运算符的所有总结了,希望小伙伴们能够批评指正。
本人良弓,初来乍到,请多关照。~






K6NT7~J1{JUTZE2H$C2~I)2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-7 16:01:10 | 显示全部楼层
为什么不能用markdown格式,格式弄得太乱了。那个图片的位置是在开篇问题解析的那里。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 16:03:30 | 显示全部楼层
良弓无箭 发表于 2020-8-7 16:01
为什么不能用markdown格式,格式弄得太乱了。那个图片的位置是在开篇问题解析的那里。

markdown格式目前在测试中,只有管理可以用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 06:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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