C语言自定义函数形参传递次序
我学习C语言大半年,还从来没有考虑过自定义函数实参传递次序,今天遇到这个问题,记录一下。
我是选用自增自减来判断方向的。
我们知道后自增,后自减运算是先传值再加减
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(int a,int b,int c )
{
printf("a=%d b=%d c=%d\n", a, b, c);
}
int main()
{
int i = 2;
fun(i++, i, i);//首先对右边第一个参数进行一个自加
system("pause");
return 0;
}
输出结果是 a=2 b=3 c=3
看似是从左往右,但如果将代码改为第二个形参自加,会有不同结果
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(int a,int b,int c )
{
printf("a=%d b=%d c=%d\n", a, b, c);
}
int main()
{
int i = 2;
fun(i, i++, i);//其他不变自增符合作用在第二个参数上
system("pause");
return 0;
}
输出结果是 a=3 b=2 c=3
为什么这次是从中间首先传入,难道是因为自增符号?
接下来我又增加自增符号
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(int a,int b,int c )
{
printf("a=%d b=%d c=%d\n", a, b, c);
}
int main()
{
int i = 2;
fun(i++, i++, i);
system("pause");
return 0;
}
输出结果是 a=3 b=2 c=4
它是先传递第二个参数,再传第一个参数,最后传第三个参数,这又是为什么呢,再次改变参数自增位置
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void fun(int a,int b,int c )
{
printf("a=%d b=%d c=%d\n", a, b, c);
}
int main()
{
int i = 2;
fun(i, i++, i++);
system("pause");
return 0;
}
此次自增作用在后两个上
打印结果为 a=4 b=3 c=2
此时应该能够猜到,传参次序是先从需要运算的参数开始,但如果有多个这样的参数则是从左边开始往右对有运算的参数传递,最后对不需要运算的参数传递。
当引用函数传参有运算符的在第一个和最后一个时充分证明了此结论。
fun(i++, i, i++);
输出结果为 a=3 b=4 c=2。