【C语言初阶】.函数的参数
三、函数的参数
1 实际参数(实参)
函数调用运算符括起来的是实参(argument)。实际参数是传递给函数的特定值。
-
实参可以是:变量、常量、表达式、函数调用等。
-
无论实参是何种类型的量,在进行函数调用时,这些量都必须有确定的值。
2 形式参数(形参)
函数定义部分,用于接收辅助性提示的变量就是形参(parameter)。
形式参数是函数用来接收实参传递的值而创建出的变量。
-
形式参数只有在函数被调用时才实例化(分配内存单元)。
-
当函数调用结束后,形式参数就自动销毁,因此形式参数只在函数体内有效。
-
同样的,形式参数的作用域是在函数的定义部分,所以可以与实际参数重名,且不冲突。
形参总结:
-
形式参数存放在栈区。
-
形式参数的作用域在函数体内。
-
形式参数的生命周期:当函数被调用时创建,函数调用结束后即被销毁。
3 示例分析
2.2.2 示例2的分析:函数实现,交换两个整型变量的值。
示例代码:
#include<stdio.h>
void swap1(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
void swap2(int* px, int* py)
{
int temp = *px;
*px = *py;
*py = temp;
}
int main()
{
//函数实现,交换两个整型变量的值。
int num1 = 5;
int num2 = 10;
printf("交换前:> num1 = %d, num2 = %d\n", num1, num2);//5 10
//交换
swap1(num1, num2);
printf("swap1:> num1 = %d, num2 = %d\n", num1, num2);//5 10
swap2(&num1, &num2);
printf("swap2:> num1 = %d, num2 = %d\n", num1, num2);//10 5
return 0;
}
3.1 调试
F10 逐过程调试,F11 逐语句调试。
说明:
该示例中, 参数 x、y、px、py
都是形式参数。
可以看到这些形式参数都有各自独立的存储空间(地址),
但是 swap1
函数中的形参只是接收并拥有了同实参一样的值,与实参没有其他关联;
而 swap2
函数中的形参的值是实参传递的地址,那么就可以通过这个地址间接访问实参,对实参的值做出修改。
3.2 结论
形参的实例化(分配内存)相当于实参的一份临时拷贝(值的复制)。
总结:
本节介绍了函数的参数;讲解了什么是实际参数和形式参数;同时说明了:形式参数相当于实际参数的一份临时拷贝。
感谢您的阅读!如有任何错误,欢迎您的批评指正!