
程序中的函数有:函数定义、声明、调用这3种使用情况。
使用系统函数只需声明和调用,不需用户定义。
[<有效范围>] <返回值类型> <函数名> (<参数表>)<函数体>
有效范围:使用的保留字:extern或static。
extern为全局函数,static局部函数。
全局函数作用于整个程序,局部函数只作用于所在的程序文件。
返回值类型:给出函数返回值的类型,当使用保留字void作为类型名时,则不需要返回值。
函数名:是一个符合C语言命名规定的标识符。通常用函数名反映该函数的功能。如用ValueSumM表示数值求和,Count表示统计。
参数表:又称形式参数表,它可以为空,可以包含一个或多个参数,每个参数由参数类型和参数名组成。
函数体:是一条复合语句。
函数头:函数体之前的部分称为函数头,又称为函数原型。
(1) void f1() {...}
(2) static void f2(int x) {...}
(3) int f3(int x,int* p) {...}
(4) char* f4(char a[]){...}//数组参数char a[]等价于char* a
(5) void f5(float c[][N], int m) {...}
//二维数组参数c,由N给出列数,由参数m给出行数。
(1) 函数定义位置:全局函数定义允许出现在整个程序的任一个程序文件内;局部函数定义只能出现在被声明和调用的同一个程序文件内。
(2) 函数原型声明语句:在利用函数调用表达式调用一个函数时,必须在此之前出现有该函数的原型声明语句或函数定义。
(3) 函数的常量形参:即在一般的形参定义前加上const修饰。
void f6(const float x, float y) {...}//x常量形参,y一般形参
//在函数体内x的值只能被读取,不能被修改
void f7(const char* a, char* b) {...}//a常量形参,b一般形参
//a所指对象只能读取不能修改,*a='d'错误,*b='d'可以
(4) 一维数组参数说明的两种格式
第1种:<数据类型> <数组名>[]
第2种:<数据类型> *<指针变量名>
参数int a[]的定义与 int* a的定义等价,同为指针变量。
如:int f8(int bc[],int n){}同int f8(int *bc,int n){}
数组的长度需要使用另一个int型参数确定
(5) 二维数组参数说明的两种格式
第1种:<数据类型> <数组参数名>[][<列数>]
第2种:<数据类型>(*<指针参数名>)[<列数>]
参数int c[][N] 等同于参数int (*c)[N]
二维数组的行数需要使用另一个int型参数确定。