二、函数的值
函数的值是指函数被挪用之后, 执行函数体中的措施段所取得的并返回给主调函数的值。如挪用正弦函数取得正弦值,挪用例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函数利用。