目录
初步了解函数的参数
函数是我们编写程序必定会用到的,但是我们真的有那么了解它吗?今天就让我们从形参和实参的角度深入学习函数。
接下来让我们上一个简单的代码,是判断是否为闰年的代码,初步了解函数的参数。
#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 拥有自己的空间,同时拥有了和实参一模一样的内容。
所以我们可以简单的认为:形参实例化之后其实相当于实参的一份临时拷贝。
知识分享到此结束,喜欢我的小伙伴,可以点赞、评论、加关注,我会努力更新的。