引入
先看这段程序:
#include<stdio.h>
int main(){
int x=0;
printf("%d %d %d",x,++x,x--);
}
会输出什么? 刚开始,我以为会输出0 1 1 ,但编译发现结果是0 0 0 !再试了试cout语句,依然如此。
探索
为什么?尝试分开三个printf():
printf("%d ",x);
printf("%d ",++x);
printf("%d" ,x--);
输出0 1 1 。很明显,是printf()时的问题了,尝试去掉第三个参数x-- ,即printf("%d %d",x,--x); ,答案为1 1 !这就能看出来了!在传入三个参数,即x ++x x-- ,时,在printf()中收到的三个参数变成了0 0 0 。 回顾自增自减运算符前后缀的性质:
x++表示将x先备份运算再自增 ++x表示先自增再运算
不难看出,在prinitf()中,由于是同时传入,导致传入后三者的值都是0.
扩展
看这段代码:
#include <bits/stdc++.h>
using namespace std;
void o(int a, int b, int c) {
printf("%d\n%d\n%d", a, b, c);
}
int main()
{
int x = 1;
o(x, ++x, x--);
return 0;
}
输出一样是1 1 1 ,可以看出,在任何时候的参数传递,都会运算完所以自增自减再传入函数。
@HaohaoCppDebuger|寻兰? 2021/11/22?
-----THE END----- THANK YOU !
|