定义
推荐将变量和函数的声明部分放在.h文件中,将函数的实现放在.c文件中。定义格式如下:
/* * 函数类型:指函数返回数据的类型 * 形式参数列表中多个参数使用逗号','分隔 */ 函数类型 函数名(形式参数列表) { 函数体 }
如果”被调用”的函数在调用者的后面,则需要先在调用者前对”被调用”者进行声明(函数原型),如果”被调用”的函数在调用者的前面,可以不进行声明而直接使用。示例如下:
#include <stdio.h> /* * max函数原型 * 由于max在main后面,如果此处不声明则,在编译期间会产生错误。 * 函数原型中的参数可以不指定形参名,只指定相应类型即可。 */ void max(int,int); int main() { int a = 5,b = 6; printf("交换前:a:%d,b:%d\n",a,b); swap(a,b); } /*交换两int变量的值*/ void swap(int a,int b) { int n = a; a = b; b = n; printf("交换后:a:%d,b:%d\n",a,b); }
参数传值方式
c中函数的传值方式包括”值传递”和”引用传递”,”值传递”的方式为:当函数调用时,将实参的值复制给形参(重新申请一份内存空间),被调用函数中对形参进行的修改不影响实参的值;”引用传递”的方式为:函数调用时,将实参的内存地址(指针)复制给形参,这样形参和实参指向的为同一块内存地址,被调用函数内对形参的修改实际上就是对实参的修改(可以利用此方式让函数返回多个值)。示例如下:
/*求最大数*/ void max(int a,int b) { return a>b ? a : b; } /*交换两变量值*/ void swap(int *a,int *b) { int n = *a; *a = *b; *b = n; } int main() { int a = 5,b = 6; /*值传递方式*/ int m = max(a,b); /*输出结果为6*/ printf("max:%d\n",m); /*交换前:a:5,b:6*/ printf("交换前:a:%d,b:%d\n",a,b); /*引用传递*/ swap(&a,&b); /*交换后:a:6,b:5*/ printf("交换后:a:%d,b:%d\n",a,b); return 0; }
函数类型
内部函数
在文件中定义并且只在当前文件中使用的函数。在函数类型前添加static关键字。函数原型如下:
static void max(int,int);
外部函数
可以让别的文件中函数调用的函数。C中函数默认的类型为外部函数,在函数类型前添加extern关键字(因为默认为此类型,所以可以省略不写),函数原型如下:
[extern] void max(int,int);
内联函数
适用于函数体代码量较少的函数,在函数类型前添加inline关键字。当被调用函数声明为内联函数时,编译器会将被调用函数的函数体复制到调用函数中之称为调用函数的一部分,这样在运行期间可以节省函数调用产生的系统开销。示例如下:
inline int max(int a,int b) { return a > b ? a :b; }