#include
int ObserveArgument(int num1,int num2)
{
printf("num1=%d\tnum2=%d\n",num1,num2);
return(num1+num2);
}
int main()
{
int i=3;
printf("i=%d\tRet=%d\n",i,ObserveArgument(i++,--i));
}
i=3 num1+num2 = 1
百度 ++i i++ --i i-- 的区别
简单说就是 前置的-- 或者 ++ 会先执行
ObserveArgument(i++,--i) --i 会先执行 让i 自减1 再传入函数
i++,先用后加,--i,先减后用,所以i传递给形参的时候是2,所以num1 , num2 = 2,ret=4
像这种函数参数传递的写法,不同编译器会有不同的答案,有可能是先计算i++,再计算--i,这样的话num1和num2都是3,ret=6,也有可能是先计算--i,再计算i++,结果就是你的结果
你的结果为什么是 2,2,4呢, 先计算--i,i=2,把2入栈,再计算i++, (i++) = 2, 又把2入栈,最后i=3, 返回值ret = 2+2 = 4了。
建议:尽量写标准,规范,可读性高,可移植性好的代码。一句话:“装X一时爽,调试火葬场”。
--i会先使i值减1,i++在运行后加1,并没有用,所以是2,2,4
这涉及到两个知识点。
第一点:++和--在前和在后的区别。
在前就先进行自增或自减,再执行赋值操作,在后就先执行赋值操作再自增或自减。
假如i= 3,则a = ++i 相当于于i = i+1; a = i; 所以结果是i = 4,a = 4。
假如i= 3,则 b = i++ 相当于b = i;i = i+1;所以结果是b = 3,i = 4。
第二点:c语言的函数参数读取顺序是从右往左。
ObserveArgument(i++,--i)这个函数的参数读取顺序是num2 = --i;num1 = i++;
相当于执行了i = i - 1; num2 = i; num1 = i ; i = i++;