函数是一组一起执行任务的语句。每一个C程序具有至少一个函数,它就是main()函数,以及所有的最微不足道的程序可以定义附加函数。
可以将代码放到独立的函数。如何划分代码之间的不同功能,但逻辑上的划分通常是让每个函数执行特定的任务。
函数声明告诉编译器有关的函数的名称,返回类型和参数。一个函数定义提供了函数的实际主体。
C标准库提供了大量的内置函数,供给程序调用。例如,strcat()函数连接两个字符串,memcpy()函数复制一个存储器位置到另一个位置,还有更多的函数。
函数是已知具有各种名称等的方法或子例程或程序等。
定义一个函数:
在C语言函数定义的一般形式如下:
return_type function_name( parameter list ) { body of the function }
在C语言编程函数定义由函数头和函数体。这里是一个函数的所有部分:
-
返回类型: 函数会返回一个值。return_type是函数返回值的数据类型。有些函数执行所需的操作没有返回值。在这种情况下,return_type是关键字void。
-
函数名称: 这是该函数的实际名称。函数名和参数列表一起构成了函数签名。
-
参数: 参数是像一个占位符。当调用一个函数,传递参数的一个值。这个值被称为实际参数或参数。参数列表指的类型,顺序和数量的函数的参数。参数是可选的;也就是说,一个函数可包含任何参数。
-
函数体: 函数体包含了定义函数做什么(命令)语句的集合。
例子:
下面是一个函数的源代码称为max()。这个函数有两个参数num1与num2并返回两者之间的最大值:
/* function returning the max between two numbers */ int max(int num1, int num2) { /* local variable declaration */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
函数声明:
函数声明告诉编译器有关的函数名以及如何调用该函数。该函数的实际体可以分别进行定义。
函数声明有以下几个部分:
return_type function_name( parameter list );
对于上述定义的函数max(),下面是函数声明:
int max(int num1, int num2);
参数名不重要,在只有类型是必需的,所以下面的函数声明是有效的声明:
int max(int, int);
当定义在一个源文件中的函数调用在另一个文件中函数函数声明是必需的。在这种情况下,应在调用函数的文件的顶部声明函数。
调用一个函数:
当创建一个C函数,给什么样的函数必须做一个定义。要使用函数不得不调用该函数来执行规定的任务。
当程序调用函数,程序控制被转移到所调用的函数。一个名为函数定义执行任务时,被执行return语句或达到其函数的右括号,则返回程序控制返回到主程序。
要调用一个函数,只需要通过必要的参数以及函数的名称,如果函数返回一个值,那么可以存储返回值。例如:
#include <stdio.h> /* function declaration */ int max(int num1, int num2); int main () { /* local variable definition */ int a = 100; int b = 200; int ret; /* calling a function to get max value */ ret = max(a, b); printf( "Max value is : %d ", ret ); return 0; } /* function returning the max between two numbers */ int max(int num1, int num2) { /* local variable declaration */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
保持max()函数连同main()函数一样并编译源代码。运行最后的可执行文件,它会产生如下结果:
Max value is : 200
函数参数:
如果一个函数使用参数,它必须声明接受参数值变量。这些变量被作为调用函数的形式参数。
正式的参数表示就像在函数内部其他局部变量并在进入函数创建和退出时销毁。
虽然调用一个函数,有一些参数可以被传递给一个函数,有两种方法:
调用类型 | 描述 |
---|---|
按值调用 | 这种方法复制一个参数的实际值到函数的形式参数。在这种情况下,参数的函数内变化对参数没有影响。 |
引用调用 | 这种方法复制一个参数的地址复制到形式参数。内部函数,地址是用来访问调用使用的实际参数。这意味着,对参数的更改影响参数。 |
默认情况下,C语言使用调用按值传递参数。在一般情况下,这意味着一个函数中的代码不能改变,调用函数的参数和上面提到的例子,尽管调用max()函数使用同样的方法。