深入理解函数的参数——实际参数(实参)和形式参数(形参)

目录

初步了解函数的参数

实际参数

形式参数

深入学习



初步了解函数的参数

函数是我们编写程序必定会用到的,但是我们真的有那么了解它吗?今天就让我们从形参和实参的角度深入学习函数。

接下来让我们上一个简单的代码,是判断是否为闰年的代码,初步了解函数的参数。

#include<stdio.h>
int isLeapYear(int year)//判断年份是否为闰年,是闰年返回1,否则返回0
{
	if ((0 == year % 4 && 0 != year % 100) || 0 == year % 400)
		return 1;
	return 0;
}
int main()
{
	int year = 0;
	printf("请输入年份:");
	scanf("%d", &year);//输入要判断的年份
	if(isLeapYear(year))//输出判定结果
		printf("%d是闰年",year);
	else
		printf("%d是平年", year);
	return 0;
}

程序的逻辑比较简单,就是通过isLeapYear这个函数判断一个年份是不是闰年,是就返回1,不是就返回0。

我们要使用函数,就要先定义函数,我们代码的第二行就是定义了函数:

函数名后括号中的变量就是形式参数。

我们再来看看条件判断语句中调用的函数:

 真实传给函数的参数,叫实参。

实际参数

真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形
参。
 

形式参数

形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内
存单元),所以叫形式参数。

形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

深入学习

接下来我们来直观看看实际参数和形式参数的区别到底是什么。

为了讲清楚,我们使用一段代码:

#include<stdio.h>
void change(int x,int y)
{
	int z=0;
	z = x;
	x = y;
	y = z;
}
int main()
{
	int a = 10;
	int b = 20;
	change(a, b);
	return 0;
}

有了上面的知识,我们可以清楚地知道调用函数change时a,b是实参,x,y是形参,我们来看看这些参数的具体情况。

首先,我们可以看到在程序执行到函数被调用之前,a和b分别被赋值为10和20。


 

 随后,我们进入函数,可以看出x=10,y=20,但是我们可以明显的观察到在下面那一栏中,a,b和x,y的地址是完全不一样的,a和b的地址分别是0x0019f87c和0x0019f870,而x,y的地址分别为0x0019f780和0x0019f784,由此得出函数的实参和形参分别储存在不同的地址中,形参的改变并不会改变实参中的数值。因为形参调用的是相应的地址中的数据,而不能调用实参地址中的数据。

 最后等函数调用结束之后x,y的数值交换了,而a,b的数值并没有改变。

 最后,当函数调用完成之后局部变量和形参就自动销毁了。因此形式参数只在函数中有效。

 这里可以看到change函数在调用的时候 x , y 拥有自己的空间,同时拥有了和实参一模一样的内容。
所以我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝。

知识分享到此结束,喜欢我的小伙伴,可以点赞、评论、加关注,我会努力更新的。


 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JDSZGLLL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值