C语言自定义函数形参传递次序

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。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s_persist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值