一、概述
1、函数的概念(c程序的结构)
(1)一个C程序可以分为若干个函数
(2)每个程序有且只能有一个主函数(main),其他函数都是“子函数”
(3)子函数可以互相调用,但主函数不能被调用
(4)一个C源程序由一个或多个文件构成,一个源程序文件是一个编译单位
2、说明
(1)c程序的执行从main函数开始,调用其他函数后人回到main函数,程序在main函数结束时结束
(2)所有子函数都是平行的,任何子函数都不属于其他函数
(3)从用户的角度看,函数可分为:标准函数,即库函数;自定义函数
(4)从函数形式看,可分为:
无参数函数:主调函数无数据传送给被调函数,可带或不带返回值。如:printstar();
有参数函数:主调函数与被调函数间有参数传递,主调函数可将实参传送给被调函数的形参, 被调函数的数据可返回主调函数。如:printf()。
#include <stdio.h>
void main( )
{
void printstar( );
void print_message( );
printstar( );
print_message( );
printstar( );
}
void printstar( )
{
printf (“*********************** n” ); }
void print_message( )
{
printf (“_ _ _ _ _How_do_you_do!n”) ;}
/*
运行结果:
****************************
How do you do!
****************************
*/
二、函数的定义
函数定义的一般形式:
类型说明 函数名 ([形式参数说明])
{ 函数体 } ——>{ [ 局部变量说明 ] ——> 局部变量:函数体内定义的变量,其有效范围仅限于所在函数的内部,离开函数体则无意义。
语句
}
形式参数说明方法:类型说明 变量名 [, 类型说明 变量名 ]……
【1】无参函数的定义形式
类型说明 函数名 ()
{ 函数体 }
【2】有参函数的定义形式
类型说明 函数名 (形式参数说明)
{ 函数体 }
【3】空函数的定义形式
类型说明 函数名 ([形式参数说明])
{ }
三、函数参数和函数的值
一个C程序由若干个函数组成,各函数调用时经常需要传递一些数据。即调用函数把数据传递给被调用函数,经被调用函数处理后,得到一个确定的结果,在返回调用函数时,把这个结果带回调用函数。各函数间的信息的往来是有参数传递和返回语句实现的。
1、形式参数和实际参数
函数参数:用于函数间数据的传递
形式参数:定义函数时使用的参数(函数名后面括号中的变量名)
实际参数:调用函数时使用的参数(函数名后面括号中的表达式)
说明:
【1】定义参数时,必须说明形参的类型。形参只能是变量或数组。
【2】函数被调用前,形参不占用内存;函数调用结束后,形参所占用的内存也将被回收。
【3】实参可以是常量、变量或表达式。
【4】实参与形参的类型必须一致。字符型和整型可以互相匹配。
【5】C语言中实参对形参的数据传递是“值传递”,即单向传递。它仅由参数的对应位置确定,与名字无关。
2、函数的返回值
【1】返回函数值的方法
函数的返回值也就是函数值,是一个确定的值
1)> 如果一个函数有返回值,就必须使用return语句。
2)> 一个函数中可以有一个以上的return语句,但不论执行到哪个return都将结束函数的调用返回主调用函数
3)> return语句中的括号可以省略;return后面的值可以是一个表达式。
【2】函数值的类型
1)>函数的类型即函数值的类型,如函数是 int 型,函数值也是 int 型。
2)>省略了类型说明的函数是 int 型的。
3)>return 用中表达式的值一般应与函数类型一致。
4)>如果不一致,则需要进行类型转换。只有数值型的数据可以进行自动类型转换,以函数类型为准。
【3】不需要返回值的函数
1)>如果函数中没有使用 return 语句,函数返回值是一个不确定的数值。
2)>如果一个函数不需要返回值(表示一个过程),可以用 void 做类型说明。
3)>如果一个函数被声明为 void 类型,就不允许再引用它的返回值(即只能用函数语句形式调用)。
四、函数的调用
1、函数调用的一般形式
一般形式: 函数名(实参列表)
说明:
(1)如果调用无参函数,实参列表可以忽略,但括号不能省。
(2)实参的各数和形参一般相等。
(3)实参与形参的类型应一 一对应,必要时使用类型转换。
注意:不同系统中,实参的计算顺序不同。微机上一般是从右到左。为避免由此引起的混乱,一般应在调用函数前计算出实参的值。
2、函数的调用方式
(1)函数语句
形式:函数名 (实参列表);
以独立的语句去调用函数。不要求有返回值,仅完成一定的操作。
例 printstar(); printf(“Hello,World!n”);
(2)函数表达式
函数返回一个确定值,以参加表达式的运算。不可用于void
例 m=max(a,b)*2;
(3)函数参数
函数调用作为另一个函数的参数。
例 printf(“%d”,max(a,b)); /*输出大数*/
m=max(a,max(b,c)); /*三数比大小*/
3、函数调用的执行过程
【1】按从右向左的顺序,计算实参中各表达式的值
【2】按照位置,将实参的值一一对应的传送给形参
【3】执行被调用函数
【4】当遇到 return(表达式)语句时,计算表达式的值,并返回主调函数
4、函数的原形说明(函数声明)
C语言中函数声明称为函数原型(形)。函数定义与函数声明不同,声明只与函数定义的第一行相同。声明可以不写形参名,只写形参类型。
函数说明位置:程序的数据说明部分(函数内或外)
作用:告诉编译系统函数类型、参数个数及类型,以便检验
在程序中调用函数需满足以下条件:
(1)被调用函数必须存在,且遵循“先定义后使用”的原则。
(2)如果