浅析那些初学者头疼i++,i--,-i--等自增自减运算符
本帖最后由 良弓无箭 于 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函数里面从右向左进行压栈。
最终i的值为8,依次出栈。所以从前到后依次输出:8,8,7,8,-7,-8.注意:上文中记录i的值意思就是向栈中写入值。以上就是令人头疼的自增自减运算符的所有总结了,希望小伙伴们能够批评指正。本人良弓,初来乍到,请多关照。~
为什么不能用markdown格式,格式弄得太乱了。那个图片的位置是在开篇问题解析的那里。 良弓无箭 发表于 2020-8-7 16:01
为什么不能用markdown格式,格式弄得太乱了。那个图片的位置是在开篇问题解析的那里。
markdown格式目前在测试中,只有管理可以用
页:
[1]