1.形式参数和实际参数
在调用有参函数时,主调函数和被调函数之间有数据传递的关系。在定义函数时函数名后面括号中的变量名称为“形式参数”(简称“形参”)。在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”(简称“实参”)。实际参数可以是常量、变量或表达式。
2.实参和形参间的数据传递
在调用函数过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到一个值。该值在函数调用期间有效,可以参加函数中的运算。
在调用函数的过程中发生的实参和形参之间的数据传递称为“虚实结合”。
例题:
输入两个整数,要求输出其中值较大者。要求用函数来找到大数。
【思路】
用一个函数来实现,在定义函数时要确定:
(1)函数名。定名为Max。
(2)函数的类型。给定的两个数是整数,两者中的较大者也是整数,也就是说Max函数的值应该是整型。
(3)Max函数的参数个数和类型。Max函数应当有两个参数,以便从主函数接受两个整数,显然,参数的类型应该是整型。
在调用Max函数时,应当给出两个整数作为实参,传递给Max函数中的两个形参。
【代码实现】
int Max(int x, int y)
{
int z;
if (x > y)
{
z = x;
}
else
z = y;
return z;
}
int main()
{
int a, b, c;
printf("输入要比较的两个整数:\n");
scanf("%d%d", &a, &b);
c = Max(a, b);
printf("Max=%d", c);
return 0;
}
输出:
【改良代码】
int Max(int x, int y)
{
return (x > y ? x : y);
}
int main()
{
int Max(int x, int y);
int a, b, c;
printf("输入要比较的两个整数:\n");
scanf("%d%d", &a, &b);
c = Max(a, b);
printf("Max=%d", c);
return 0;
}
输出:
【程序分析】
主函数中包含了一个函数调用Max(a,b)。Max后面括号内的a,b时实参。a和b是在main函数中定义的变量,x和y是函数Max的形式参数。通过函数调用,在两个函数之间发生数据传递,实参a和b的值传递给形参x和y,在Max函数中把x和y中的大者赋给变量z,z的值作为函数值返回main函数,赋给变量c。
说明:
(1)实参可以是常量、变量或表达式,例如:Max(3,a+b)
,但要求它们有确定的值。在调用时将实参的值赋给形参。
(2)实参与形参的类型应相同或赋值兼容。上例中,实参和形参的类型相同,都是int型,这是合法的、正确的。如果实参为int型而形参为float型,或者相反,则按不同类型数值的赋值规则进行转换。例如实参a为float型变量,其值为3.5,而形参x为int型,则在传递时先将实数3.5转换成整数3,然后传递到形参x。字符型与int型可以互相通用。