一、函数的定义与使用
《编程之道》中写道:“一个程序应该是灵活自由的、它的子过程就像串在一根线子上的珍珠。”子过程在C语言中被称为”函数“。程序的执行从主函数开始,往复、循环、迭代地调用一个又一个函数。
函数的分类
1.库函数
printf()、scanf()等都是ANSIC标准的库函数。任何ANSI C的编译器,无论在什么的平台,都必须提供这些函数供用户使用。仅调用ANSI C库函数的程序,具有很好的移植性,能在多种平台上编译运行。还有数量巨大的第三方函数库,完成ANSI C中不包括而又是程序设计需要的功能,例如:微积分运算,数据库和图形界面等。
2.自定义函数
定义一个函数我们需要确定三部分内容:
1.函数的返回值类型
2.函数的名称
3.函数的参数
注:函数名的命名是函数的唯一标识,它的命名规则与变量没什么不同的。
函数定义的语法结构如下:
返回值类型 函数名(类型参数1,类型 参数2)
{
局部变量定义语句
可执行语句序列
}
例子:比较两个整数大小的函数
intMin(int a,int b)
{
int result=(x>y)?y:x;
return result;
}
这里定义名为Min的函数。它有两个参数,返回值和参数的类型均为int,函数的作用是比较两个整数那整数小。此例并非一个可运行的程序。有main()函数的程序才能运行;函数必须main()直接或间接调用才能发挥作用。
二、函数的调用、参数、参数传递和返回值
main()函数调用其他函数可以想象成给员工分配任务。
调用函数的实例如下:
比较两个整数的大小程序;
#include<stdio.h>int max(int i,int t){ int result; result=i>t?i:t; return result; }int main(){ int a=36; int b=72; int larger; larger=max(a,b); printf("%d",larger); return 0; }
程序运行结果
72
在主函数中变量a和b的值作为参数提供给了max()。这时开始执行max(),且把a与b的值分别复制给了max函数定义的i和t,这个过程就是参数传递。max函数内接收的数据的参数(即i和t)叫形式参数,简称形参;调用者提供的参数(主函数的a和b这两个参数)叫实际参数;简称实参。
实参的数据必须与形参的数据相等,它们的类型必须匹配(匹配的原则与变量赋值的原则一致)。形参相当于在函数内定义的变量,也可以被赋值。实参与形参有各自的存储空间,所以形参值得改变不会影响实参。
一个函数可以定义的形参并无明确的数量限制,用户可以按照需要随意定义。
参数的类型也没有限制,任何可用类型均能使用,不同参数可以是不同的类型。例如
int fun(int a,float b,charc){ …}
这样子写是合法的。
也可以定义没有参数的函数,这种函数不需要调用者提供任何数据,例子
int func(void){ …}
三、主函数main()的特殊性
C语言在设计中注重一致性。
1.一致性体现在各个函数都是平等的,没有主从之分,可以随意相互调用,每个函数都可以调用其他的函数,其他函数也可以在调用其他函数。函数也可以调用自己,被称为”递归函数“;
2.一致性体现在定义各种函数的语法都遵守共同的语法规则。
尽管main函数也有返回值,但是有时在定义main()时,可以不指明其返回值类型,没有参数也可以不用void。这种用法是符合C语言语法,任何函数也都可以如此定义。
关注更多C语言学习|函数的应用《二》