C编程中的函数
什么是函数?
函数是执行某种特定任务的语句块。
每个C程序都可以视为这些函数的集合。
创建函数后,我们可以从main()中调用它。
函数也可以互相调用。
函数甚至可以调用自身。
调用自身的函数称为递归。
可以从上述计划中得出的结论
C程序是一个或者多个函数的集合。
如果C程序仅包含一个函数,则它必须是main()。
如果C程序包含多个函数,则其中一个函数是main(),因为程序执行从main()开始。
程序中可以有尽可能多的功能。
为什么需要功能?
它将程序划分为单独的定义明确的函数,以便可以分别编写和测试每个函数。
由于将它们分开,所以理解,编码和测试变得非常容易。
编写函数可以避免一遍又一遍地重写相同的代码。
随着功能的划分,工作量也可以在程序员之间分配。
C中的函数声明
功能声明
基本语法:
return_data_type function_name (data_type var1, data_type var2, …..);
其中:
function_name:函数的名称应有效。
它应该是一个有意义的名称,它应阐明它将执行的所有任务。
return_data_type:用于指定处理后返回到调用函数的值的数据类型。
data_type var1,data_type var2:函数参数及其数据类型。
返回数据类型
返回值的类型与C中的其他值相同。
它可以是int,float,char或者其他任何类型。
返回值的类型决定了函数的类型。
函数的默认返回类型为int或者integer。
返回数据类型
在以上程序中,我们具有3个功能:
multiple():其返回类型为int,因此它将返回整数类型值。
print():其返回类型为void,因此将不返回任何内容,仅执行其中的代码。
split():其返回类型为浮点型,因此它将返回一个十进制类型的值。
C中的函数定义
每当定义函数时,其空间就会分配到内存中。
语法:
return_data_type function_name (data_type var1, data_type var2, …..); { …................... statements; …................... return (variable); }
大括号({})中编写的语句是包含要执行的代码的函数的主体。
在C中调用函数
无论何时调用该函数,编译器都会跳至被调用函数以执行其语句。
我们的意思是该控件将传递给函数main()的活动被暂时挂起。
一旦执行了被调用的函数,程序的控制权就会传回给调用函数。
在函数之间传递值
在C中传递值
在上面的程序中,变量a,b,c被称为实际参数。
变量x,y,z被称为形式参数。
在C中按值调用
在这种参数传递方法中,实际参数的值被复制到函数的形式参数中,并且两种类型的参数存储在不同的存储位置中。
因此,在函数内部进行的任何更改都不会反映在调用者的实际参数中。
在调用函数时,我们将变量的值传递给它。
这些功能称为"按值调用"。
C程序说明按值调用
#include<stdio.h> void swapx(int x, int y); int main() { int a = 100, b = 200; //Pass by Values swapx(a, b); printf("a=%d b=%d\n", a, b); return 0; } void swapx(int x, int y) { int t; t = x; x = y; y = t; printf("x=%d y=%d\n", x, y); }
即使在交换x和y的值之后,a和b的实际值仍保持不变。
在C中通过引用调用
在调用函数时,我们不传递变量的值,而是将变量(指针)的地址传递给称为"按引用调用"的函数。
实际参数和形式参数都指向相同的位置,因此在函数内部所做的任何更改实际上都会反映在调用者的实际参数中。
C程序说明按引用调用
#include<stdio.h> void swapx(int*, int*); int main() { int a = 100, b = 200; //Pass reference swapx(&a, &b); printf("a=%d b=%d\n", a, b); return 0; } void swapx(int* x, int* y) { int t; t = *x; *x = *y; *y = t; printf("x=%d y=%d\n", *x, *y); }
在交换x和y的值后,a和b的实际值将更改。
什么是递归函数?
调用自身的函数称为递归函数。
使用递归函数时,一定要小心,以定义函数的退出条件,否则可能导致无限循环。
它们用于计算数字,斐波那契数列等的阶乘。
#include<stdio.h> int fib(int n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); } int main () { int n = 9; printf("%d", fib(n)); getchar(); return 0; }