c语言中函数头部定义形式 c语言函数头是什么意思( 三 )


二)、定义格式举例
(1) void f1() {...}
(2) void f2(int x) {...}
(3) int f3(int x,int* p) {...}
(4) char* f4(char a[]){...}
(5) int f5(int x,double d) {...}
(6) int f6(int b[10], int n) {...}
(7) void f7(float c[][N], int m, float max) {...}
(8) bool f8(ElemType* bt, ElemType item) {...}
在第一条函数定义中,函数名为f1,函数类型为void,参数表为空,此函数是一个无参无类型函数 。若在f1后面的圆括号内写入保留字void,也表示为无参函数 。
在第二条函数定义中,仅带有一个类型为int的形参变量x,该函数没有返回值 。
在第三条函数定义中 , 函数名为f3,函数类型为int,函数参数为x和p,其中x为int型普通参数,p为int*型指针参数 。
在第四条函数定义中,函数名为f4,函数类型为char*,即字符指针类型,参数表中包含一个一维字符数组参数 。注意:在定义任何类型的一维数组参数时,不需要给出维的尺寸 , 当然给出也是允许的 , 但没有任何意义 。
在第五条函数定义中,函数名为f5 , 返回类型为int,该函数带有两个形参,一个为 整型引用变量x,另一个为双精度变量d 。
在第六条函数定义中,函数名为f6,函数类型为int,即整型引用,该函数带有两个形参,一个是整型数组b , 另一个是整型变量n 。在这里定义形参数组b所给出的维的尺寸10可以被省略 。
在第七条函数定义中,函数名为f7,无函数类型,参数表中包含三个参数,一个为二维单精度型数组c , 第二个为整型变量m,第三个为单精度引用变量max 。注意:当定义一个二维数组参数时,第二维的尺寸必须给出,并且必须是一个常量表达式 , 第一维尺寸可给出也可不给出,其作用相同 。
在第八条函数定义中,函数名为f8,返回类型为bool,即逻辑类型,该函数带有两个参数,一个为形参bt,它为ElemType的指针引用类型 , 另一个为形参item,它是ElemType的引用类型 , 其中ElemType为一种用户定义的类型或是通过typedef语句定义的一个类型的别名 。
三)、有关函数定义的几点说明
1. 函数原型语句
在一个函数定义中,函数体之前的所有部分称为函数头,它给出了该函数的返回类型、每个参数的次序和类型等函数原型信息 , 所以当没有专门给出函数原型说明语句时,系统就从函数头中获取函数原型信息 。
一个函数必须先定义或声明而后才能被调用,否则编译程序无法判断该调用的正确性 。一个函数的声明是通过使用一条函数原型语句实现的,当然使用多条相同的原型语句声明同一个函数虽然多余但也是允许的,编译时不会出现错误 。
在一个完整的程序中,函数的定义和函数的调用可以在同一个程序文件中,也可以处在不同的程序文件中,但必须确保函数原型语句与函数调用表达式出现在同一个文件中 , 并且函数原型语句出现在前,函数的调用出现在后 。
通常把一个程序中用户定义的所有函数的原型语句组织在一起,构成一个头文件,让该程序中所含的每个程序文件的开始(即所有函数定义之前)包含这个头文件(通过#include命令实现) , 这样不管每个函数的定义在哪里出现,都能够确保函数先声明后使用(即调用)这一原则的实现 。
一个函数的原型语句就是其函数头的一个拷贝,当然要在最后加上语句接上结束符分号 。函数原型语句与函数头也有细微的差别,在函数原型语句中,其参数表中的每个参数允许只保留参数类型,而省略参数名 , 并且若使用参数名也允许与函数头中对应的参数名不同 。

推荐阅读