用
时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等
办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的
值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不
会变化。
【例 8.2】可以说明这个问题。
main()
{
int n;
printf("input number\n");
scanf("%d",&n);
s(n);
printf("n=%d\n",n);
}
int s(int n)
{
int i;
for(i=n-1;i>=1;i--)
n=n+i;
printf("n=%d\n",n);
}
谭浩强 C 语言程序设计 2001 年 5 月 1 日
本程序中定义了一个函数s,该函数的功能是求∑ni的值。在主函数中输入n值,并作
为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参变量和实参变量的标识符都
为n,但这是两个不同的量,各自的作用域不同)。在主函数中用printf 语句输出一次n值,
这个n值是实参n的值。在函数s中也用printf 语句输出了一次n值,这个n值是形参最后取得
的n值 0。从运行情况看,输入n值为 100。即实参n的值为 100。把此值传给函数s时,形参n
的初值也为 100,在执行函数过程中,形参n的值变为 5050。返回主函数之后,输出实参n
的值仍为 100。可见实参的值不随形参的变化而变化。
8.3.2 函数的返回值
函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的
值。如调用正弦函数取得正弦值,调用例 8.1 的 max 函数取得的最大数等。对函数的值(或
称函数返回值)有以下一些说明:
1) 函数的值只能通过 return 语句返回主调函数。
return 语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个 return
语句,但每次调用只能有一个 return 语句被执行,因此只能返回一个函数值。
2) 函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类
型为准,自动进行类型转换。
3) 如函数值为整型,在函数定义时可以省去类型说明。
4) 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void”。如例
8.2 中函数 s 并不向主函数返函数值,因此可定义为:
void s(int n)
{ ……
}
一旦函数