函数是 C/C++语言中的一种程序组件单位。一个函数通常代表了一种数据处理的功能,由函数体和函数原型两部分组成。函数原型为这个数据处理功能指定一个标识符号(函数的名称)、说明被处理数据的组成及其类型、处理结果的类型。函数体由一组语句组成,具体实现数据处理的功能。这称为函数的定义。在某段程序中,一个函数可以被当作一个表达式来运行,称为函数的调用。函数的定义并不执行函数体中的语句,只是声明该函数包含这些语句、以及这些语句的运行顺序。函数在被调用之前,必须说明它的原型。被函数处理的数据一般作为函数的参数,在函数调用时确定它们的值。但是在函数体的语句中,可以直接访问函数的参数。函数运行后可以把它的结果返回给调用它的程序。
1. 函数定义
函数的定义形式如下:
返回值类型 函数名([参数1类型 参数名1[,参数2类型 参数名2[,...]){ 语句1; 语句1; ... 语句1; return 返回值; //如果返回值类型为void,则不用返回语句 }
返回值类型表示该函数如果被调用,它执行完之后向调用它的程序返回何种数据类型的值。函数名是程序员自己定义的、能够表明函数用途的标识符号,命名规则与变量的命名规则相同。参数是可选的,有些函数没有参数,有些可以有一至多个参数。每个参数都应说明其类型,以便调用它的程序可以填入正确的参数值。小括号和大括号是必须的。语句中可以把参数当作变量来使用。
函数定义也可以分成两部分,即函数原型说明和函数体。函数原型说明必须在函数调用之前。函数体可以紧跟着函数原型说明,也可以放在程序中间的位置。
如:
#include <stdio.h> int mul(int x, int y); //函数原型说明 int main(){ int a =0, b = 0; scanf("%d%d,&a,&b); printf("%d ",mul(a,b)); //函数调用 return 0; } int mul(int x, int y){ return x*y; }
2. 函数调用
在一段程序中引用一个已经定义过的函数称为函数的调用。在调用函数时要给出每个参数的取值。如果函数有返回值,可以定义一个与返回值类型相同的变量,存储函数的返回值。
有返回值的函数调用可以出现在表达式中。
3. 参数传递
参数作为数值传递给被调用的函数,在函数内部等同于内部变量。
4. 返回值
函数执行完以后可以向调用它的程序返回一个值,表明函数运行的状况。很多函数的功能就是对参数进行某种运算,之后通过函数返回值给出运算结果。函数的返回值可以有不同的类型,返回值类型在函数定义时说明。
5. 库函数和头文件
C/C++语言标准中,规定了完成某些特定功能的一些函数,这些函数是不同厂商的C/C++语言编译器都会提供的,并且在用 C/C++语言编程时可以直接调用的。这样的函数统称为 C/C++标准库函数。
函数必须先声明原型,然后才能调用。 C/C++语言规定,不同功能的库函数,在不同的头文件里进行声明。头文件就是编译器提供的,包含许多库函数的声明,以及其他内容(比如用#define 语句定义一系列标识符)的文件。头文件的后缀名是.h。编程时若要使用某个库函数,就需要用#include 语句将包含该库函数原型声明的头文件,包含到程序中,否则编译器就会认为该函数没有定义。
C语言标准库函数:
序号 | 头文件 | 说明 |
1 | <asset.h> | 断言 |
2 | <ctype.h> | 类型判断 |
3 | <errno.h> | 错误信息 |
4 | <float.h> | 浮点数 |
5 | <limits.h> | 整型数据类型的表达值范围 |
6 | <locale.h> | 本地化函数 |
7 | <math.h> | 数学函数 |
8 | <setjmp.h> | 非局部标号和goto作用 |
9 | <signal.h> | 信号函数 |
10 | <stdarg.h> | 让函数能够接收可变参数 |
11 | <stddef.h> | 标准定义 |
12 | <stdlib.h> | 标准库头文件 |
13 | <stdio.h> | 标准输入输出函数 |
14 | <string.h> | 字符数组 |
15 | <time.h> | 时间 |