【C语言入门教程】5.3 函数的调用 与 参数

函数通过调用获得程序的控制权,函数的参数是调用者与函数的数据接口。函数可以定义一个或多个参数,也可以省略参数,调用时将与参数的数据类型相匹配的数据置于参数列表中,即可在函数体内使用。参数的调用有多种形式,对函数的影响也有不同的结果。

5.3.1 形式参数 与 实际参数

形式参数 是 接口数据的目的地,实际参数是接口数据的来源地。函数定义时出现在参数列表中的参数是形式参数,函数体通过引用形式参数获得接口数据。函数调用时填入的参数是实际参数,实际参数由调用
者提供。形式参数与实际参数的数据类型必须一致,同时还需要注意实际参数的个数和位置要与形式参数相同。

5.3.2 赋值调用 与 引用调用

赋值调用 与 引用调用 是传递数据给函数的2种形式,前者是将实际参数的数值传递给形式参数,后者是将实际参数的内存地址传递给形式参数。赋值调用不会改变实际参数原有的数值,而引用调用则可能改变实际参数的数值。使用引用调用时,参数的类型需设置为指针,如下例所示:

#include <stdio.h>

void func(int a, int *b)	// 定义函数的形式参数,a 为整形,b 为整形指针
{
	a = 199;				// 给形式参数 a 赋值
	*b = 299;				// 给形式参数 *b 所指向的内存单元赋值
}

int main ()
{
	int a = 0, b = 0;		// 声明整形变量 a 和 b,并赋值
	printf("a = %d, b = %d
", a, b); // 第一次输出变量 a 和 b 的值
	func(a, &b); // 将变量 a 的值 和 变量 b 的地址作为实际参数传递给函数
	printf("a = %d, b = %d
", a, b); // 第二次输出变量 a 和 b 的值
	return 0;
}

输出结果:

a = 0, b = 0
a = 0, b = 299

func() 函数定义了 2个参数,参数 a 为整型,参数 b 为整型变量。main()函数将变量 a 的数值和变量 b 的地址作为实际参数传递给 func() 函数。在 func() 函数体内,形式参数 a 的数值 和 b所指向内存单元的数值被改变。func() 函数调用结束后,将控制权还给 main() 函数。因为 main() 函数内的变量 a 是以赋值调用的形式传递给 func() 函数的,所以 func() 函数修改形式参数 a 的值并不会对实际参数 a 的值做任何改变。而 main() 函数将变量 b 的地址作为实际参数传递给 func() 函数,形式参数 b 获得了变量 b 的内存地址,通过间接引用修改了变量 b 的值。

原文地址:https://www.cnblogs.com/52php/p/5681440.html