前言
- 函数是完成特定任务的独立程序代码单元。C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。
- 函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给我们。
函数的原型和调用
-
无参数函数的定义:
- 如果函数不接收用户传递的数据,那么定义时可以不带参数。形式如下:
return_type function_name( ) { body of the function }
- return_type是返回值类型,它可以是C语言中的任意数据类型;function_name是函数名,它是标识符的一种,命名规则和标识符相同,函数名后面的括号()不能少;body of the function是函数体,它是函数需要执行的代码,是函数的主体部分,即使只有一个语句,函数体也要由{}包围;如果有返回值,在函数体中使用 return 语句返回。return 出来的数据的类型要和return_type一样。如:
void hello_demo() { printf ("Hello World! \n"); //没有返回值就不需要 return 语句 } double circle_demo() { int r = 1; double cir = 2*3.14*r; return cir; }
-
有参数函数的定义:
- 如果函数需要接收用户传递的数据,那么定义时就要带上参数。形式如下:
return_type function_name( dataType1 param1, dataType2 param2 ... ) { body of the function }
- dataType1 param1,dataType2 param2...参数列表。函数可以只有一个参数,也可以有多个,多个参数之间由‘,’分隔。参数本质上也是变量,定义时要指明类型和名称。
- 数据通过参数传递到函数内部进行处理,处理完成以后再通过返回值告知函数外部。如:
double circle_demo(double r) { double cir = 2*3.14*r; return cir; }
- 注意:C语言不允许函数嵌套定义;也就是说,不能在一个函数中定义另外一个函数,必须在所有函数之外定义另外一个函数。main() 也是一个函数定义,也不能在 main() 函数内部定义新函数。
-
函数的声明:
- 注意:C语言代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。
- 注意:当在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,应该在调用函数的文件顶部声明函数。
- 函数声明会告诉编译器函数名称及如何调用函数。形式如下:
return_type function_name(dataType1 param1, dataType2 param2 ... );
- 在函数声明中,参数的名称并不重要,只有参数的类型是必需的,因此下面也是有效的声明:
return_type function_name(dataType1, dataType2 ... );
- 当声明某个函数,其参数是长度可变数组(variable-length array),除了在函数定义的头部,其他地方都可以使用星号(*)来表示数组长度。如果使用非常量的整数表达式来定义数组长度,编译器会将它视为星号。如下:
double maximum( int nrows, int ncols, double matrix[nrows][ncols] ); double maximum( int nrows, int ncols, double matrix[ ][ncols] ); double maximum( int nrows, int ncols, double matrix[*][*] ); double maximum( int nrows, int ncols, double matrix[ ][*] );
-
函数的调用:
- 所谓函数调用(Function Call),就是使用已经定义好的函数。一般形式如下:
function_name(param1, param2