函数那些事
我们在做大的项目时往往需要很多行代码,小到一个学生信息管理系统(约几百行代码),大到是一个系统(如Linux系统约几G的代码)。这时如果把这些代码放到一个文件中,甚至一个主函数中,那么代码非常繁琐。在日常的维护中是非常麻烦的。
为了解决这个问题,所以我们把项目分成几个小小的模块,而这些模块往往会使用相同的功能。所以把这些相同功能的代码放到一个函数中。如我们经常使用的输入函数(scanf)和输出函数(printf)等,都是存放在相应的头文件中。这些头文件的代码是能查看的,但需要相应的方法,不需要大家知道里面的内容,想知道的可以百度。
函数的使用和变量一样,都需要先定义再使用。而如果想先使用某个函数,后定义该函数,则需要先声明该函数。声明方式为:函数返回类型 函数名(参数列表);,参数列表可以省略,即:函数返回类型 函数名();。如果在主函数(main函数)前定义了该函数,则不需要进行声明。
因为函数是你想让它有相应的功能,所以要定义该函数,定义方式为:函数返回类型 函数名(参数列表){实现相应功能的代码}。其中参数列表是不能省略的。函数返回类型不仅可以是定义变量的所有类型,还可以是空返回类型void。其实主函数(main函数)的定义也可以是void,这样定义主函数:void main()。建议你们现在不要这样定义。函数名也要符合C语言的标识符命名规则(只能有字母、下划线、数字组成,且不能以数字开头)。
函数也有和switch语句、循环语句中的break语句同样的功能语句,那就是return语句。在有返回类型的函数中,函数在遇到return语句后就会结束该函数后面的代码的执行,直接返回被调函数,继续执行被调函数调用该函数的后面代码。并返回return后面的数据。并且返回的数据可以赋值给一个变量;return语句只能返回一个数据,不能返回多个数据。
函数的调用方式是: 函数名(参数列表);,并且参数列表不能有参数的数据类型。我们把定义和声明的参数列表中的变量称为形参,形参就像是提前在函数的第一行代码的执行定义并赋值的变量。我们也把调用函数时的参数列表中的变量称为实参,实参既是调用函数和被调函数进行数据传递方式之一,也是控制背调函数的执行。
因为我们集训不讲指针的知识,所以你们现在调用的函数时都是不会改变实参的值。特例是交换两个数的值时这样调用change函数(我把函数交换值的名字定义为change),change(a,b);。这样a和b 的值时不会改变的。但是如果参数列表为数组的话会改变数组元素的值(该知识为指针内容的,以后会学到,现在知道就行,考核一般是不会考的)。