1. 函数说明
在定义函数时,ANSI C要求每个参数都要声明类型。例如,
void example(int x, y, z) //声明错误,错误的函数头
void example(int x, int y, int z) //声明正确,正确的函数头
void表示函数没有返回值。如果函数头中的括号中是void表示函数没有输入参数。
在使用函数之前,要用ANSI C形式声明函数原型。
2. 递归函数
递归函数必须包含能用递归调用停止的语句。通常,递归函数都使用if或其他等价的测试调价在函数
形参等于某特定值时终止递归。为此,每次递归调用的形参都要使用不同的值。
递归函数的优缺点:
优点:递归为某些编程问题提供了最简单的解决方案;
缺点:递归算法会快速消耗计算机的内存资源。递归不方便阅读和维护。
3. 使用多个文件定义函数
如果把main函数放在第一个文件中,把函数放在第二个文件中。那么在调用函数时仍需要使用函数原型,把函数
放在头文件中,就不需要在主函数之前写上函数原型。例如:
1.第一个文件:主函数;
2. 第二个文件:定义函数;
3.第三个文件:(头文件—— .h文件)说明函数原型。
其中,主函数的文件和定义函数的文件要使用#include "头文件"。这相当于当主函数和函数都在一个文件中
时,需要声明函数原型,定义函数。
注意:
当修改被调用函数中参数的值的时候并不会改变主函数中的实参的值。例如:
主函数中调用函数change来交换两个数。主函数中调用函数语句为change(a,b)
change函数的定义为change(int c , int d)
如果change函数交换了a,b的值(通过形参c,d将主函数中的数值a,b传进来)并不会影响主函数中的a,b的值。
因为在c语言中a,b,c和d是四个数,与fortran中的函数或子程序不同。在Fortran中在函数或子程序中交换a和b的值
那么返回主程序之后a和b的值也会相应的改变,虽然他们的名字不同但是地址相同(a和c的地址相同,b和d的地址相同)。
在c语言中要解决上面的问题需要使用指针(pointer)。