@[toc![]](https://i-blog.csdnimg.cn/direct/37de4aff41354377bb5f3a33fa845a61.png)
1、形参和实参
如之前的文章(21)函数入门 – 保证入门中的3.4.3、形参和实参简单简介章节介绍过的。
如果把函数比喻成一台机器,那么参数就是原材料,返回值就是最终产品;从一定程度上讲,函数的作用就是根据不同的参数产生不同的返回值。
这一节我们再来细致讲解一下 C 语言函数的参数。
C 语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,明显这两个地方的参数是有区别的。
再看看我们前面写的代码:
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
//调用加法函数,完成a和b的相加,求和的结果放在sum中
int sum = Add(a, b);
printf("%d\n", sum);
return 0;
}
1.1、形参(形式参数)
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称**形参**。
- 在上面代码中,橙色代码,声明函数的时候,在函数名 Add 后的括号中写的
x 和 y,称为形式参数,简称形参。
为什么叫形式参数呢?
实际上,如果只是定义了 Add 函数,而不去调用的话,Add 函数的参数 x 和 y 只是形式上存在的,不会向内存申请空间,不是真实存在的,所以叫形式参数。
形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程就是形参的实例化。
1.2、实参(实际参数)
函数被调用时给出的参数包含了实际的数据,会被函数内部的代码使用,所以称为实际参数,简称**实参**。
- 在上面代码中,绿色代码,调用函数的时候,传递给函数的参数
a 和 b,称为实际参数,简称实参。实参就是真实传递给函数的参数。
形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
2、区别和联系
- 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
- 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
- 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了。
所以,在函数调用过程中,形参的值发生改变并不会影响实参。
虽然我们提到了实参是传递给形参的,他们之间是有联系的,但是形参和实参各自是独立的内存空间。
这个现象是可以通过调试来观察的。
请看下面的代码和调试演示:
我们在调试的可以观察到,x 和 y 确实得到了 a 和 b 的值,但是 x 和 y 的地址和 a 和 b 的地址是不⼀样的,所以我们可以理解为形参是实参的⼀份临时拷贝。
以上调用 Add() 时是将变量作为函数实参,除此以外,你也可以将常量、表达式、函数返回值作为实参。
如下所示:
total = sum(10, 98); //将常量作为实参
total = sum(a+10, b-3); //将表达式作为实参
total = sum(pow(2,2), abs(-100)); //将函数返回值作为实参
也可以是更加复杂的类型,可以是数组,可以是指针,等我们后期学习指针的时候再讲解。
2.1、形参和实参同名
形参和实参可以同名,因为它们之间是相互独立的,互不影响,因为实参在函数外部有效,而形参在函数内部有效。
更改上面的代码,让实参和形参同名:
#include <stdio.h>
int Add(int a, int b)
{
return a + b;
}
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
printf("a=%d, b=%d\n", a, b);
//调用加法函数,完成a和b的相加,求和的结果放在sum中
int sum = Add(a, b);
printf("a=%d, b=%d\n", a, b);
printf("%d\n", sum);
return 0;
}
运行发现结果是一样的!
在这段代码中,函数定义处的 x 和 y 是形参,函数调用处的 a、b 是实参。通过 scanf() 可以读取用户输入的数据,并赋值给实参 a、b,在调用 Add() 函数时,这份数据会传递给形参 a 和 b。
从运行情况看,输入 a 值为 3,即第 13 行实参 a 的值为 3,把这个值传递给函数 Add() 后,形参 a 的初始值也为 3。Add 函数运行结束后,第 17 行输出实参 a 的值仍为 3,可见实参的值不会随形参的变化而变化。
每日一更!
公众号、优快云等博客:小鹅编程笔记
日更较慢有需要完整笔记请私我,C/C++/数据结构-算法/单片机51-STM32-GD32-ESP32/嵌入式/Linux操作系统/uboot/Linux内核-驱动-应用/硬件入门-PCB-layout/Python/后期小程序和机器学习!

被折叠的 条评论
为什么被折叠?



