二、函数的值
函数的值是指
函数被调用之后, 执行
函数体中的程序段所取得的并返回给主调
函数的值。如调用正弦
函数取得正弦值,调用例5.1的max
函数取得的最大数等。对
函数的值(或称
函数返回值)有以下一些说明:
1.
函数的值只能通过return语句返回主调
函数。return 语句的一般形式为:
return 表达式;
或者为:
return (表达式);
该语句的功能是计算表达式的值,并返回给主调
函数。 在
函数中允许有多个return语句,但每次调用只能有一个return 语句被执行, 因此只能返回一个
函数值。
2.
函数值的类型和
函数定义中
函数的类型应保持一致。 如果两者不一致,则以
函数类型为准,自动进行类型转换。
3. 如
函数值为整型,在
函数定义时可以省去类型说明。
4. 不返回
函数值的
函数,可以明确定义为“空类型”, 类型说明符为“void”。如例5.3中
函数s并不向主
函数返
函数值,因此可定义为:
void s(int n)
{ ……
}
一旦
函数被定义为空类型后, 就不能在主调
函数中使用被调
函数的
函数值了。例如,在定义s为空类型后,在主
函数中写下述语句 sum=s(n); 就是错误的。为了使程序有良好的可读性并减少出错, 凡不要求返回值的
函数都应定义为空类型。
函数说明在主调
函数中调用某
函数之前应对该被调
函数进行说明, 这与使用变量之前要先进行变量说明是一样的。 在主调
函数中对被调
函数作说明的目的是使编译系统知道被调
函数返回值的类型, 以便在主调
函数中按此种类型对返回值作相应的处理。 对被调
函数的说明也有两种格式,一种为传统格式,其一般格式为: 类型说明符 被调
函数名(); 这种格式只给出
函数返回值的类型,被调
函数名及一个空括号。
这种格式由于在括号中没有任何参数信息, 因此不便于编译系统进行错误检查,易于发生错误。另一种为现代格式,其一般形式为:
类型说明符 被调
函数名(类型 形参,类型 形参…);
或为:
类型说明符 被调
函数名(类型,类型…);
现代格式的括号内给出了形参的类型和形参名, 或只给出形参类型。这便于编译系统进行检错,以防止可能出现的错误。例5.1 main
函数中对max
函数的说明若
用传统格式可写为:
int max();
用现代格式可写为:
int max(int a,int b);
或写为:
int max(int,int);
C语言中又规定在以下几种情况时可以省去主调
函数中对被调
函数的
函数说明。
1. 如果被调
函数的返回值是整型或字符型时, 可以不对被调
函数作说明,而直接调用。这时系统将自动对被调
函数返回值按整型处理。例5.3的主
函数中未对
函数s作说明而直接调用即属此种情形。
2. 当被调
函数的
函数定义出现在主调
函数之前时, 在主调
函数中也可以不对被调
函数再作说明而直接调用。例如例5.1中,
函数max的定义放在main
函数之前,因此可在main
函数中省去对 max
函数的
函数说明int max(int a,int b)。
3. 如在所有
函数定义之前, 在
函数外预先说明了各个
函数的类型,则在以后的各主调
函数中,可不再对被调
函数作说明。例如:
char str(int a);
float f(float b);
main()
{
……
}
char str(int a)
{
……
}
float f(float b)
{
……
}
其中第一,二行对str
函数和f
函数预先作了说明。 因此在以后各
函数中无须对str和f
函数再作说明就可直接调用。
4. 对库
函数的调用不需要再作说明, 但必须把该
函数的头文件用include命令包含在源文件前部。数组作为
函数参数数组可以作为
函数的参数使用,进行数据传送。 数组用作
函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用; 另一种是把数组名作为
函数的形参和实参使用。一、数组元素作
函数实参数组元素就是下标变量,它与普通变量并无区别。 因此它作为
函数实参使用与普通变量是完全相同的,在发生
函数调用时, 把作为实参的数组元素的值传送给形参,实现单向的值传送。例5.4说明了这种情况。[例5.4]判别一个整数数组中各元素的值,若大于0 则输出该值,若小于等于0则输出0值。编程如下:
void nzp(int v)
{
if(v>0)
printf("%d ",v);
else
printf("%d ",0);
}
main()
{
int a[5],i;
printf("input 5 numbers\n");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
nzp(a[i]);
}
}void nzp(int v)
{ ……
}
main()
{
int a[5],i;
printf("input 5 numbers\n");
for(i=0;i<5;i++)
{ scanf("%d",&a[i]);
nzp(a[i]);
}
} 本程序中首先定义一个无返回值
函数nzp,并说明其形参v 为整型变量。在
函数体中根据v值输出相应的结果。在main
函数中用一个for 语句输入数组各元素, 每输入一个就以该元素作实参调用一次nzp
函数,即把a[i]的值传送给形参v,供nzp
函数使用。
posted on 2007-05-01 02:17
悲惨的狼 阅读(87)
评论(0) 编辑 收藏 引用 所属分类:
C语言第五章