文章目录
前言
一、函数的基本用法
1.函数的声明、实现
2.函数的调用(函数的使用)
二、函数的参数传递
1.全局变量
2.复制传递方式
3.地址传递方式
4.二维数组的求和
三、指针函数
四、递归函数
五、函数指针
写在最后
一、函数的基本用法
函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值(无返回函数)。
下面是我们常用的函数:
1.函数的声明、实现
一般形式:
<数据类型> <函数名称>( <形式参数说明> ) { 语句序列; return[(<表达式>)]; }
注意点:
<数据类型>是整个函数的返回值类型。return[(<表达式>)]语句中表达式的值,要和函数的<数据类型>保持一致。如无返回值应该写为void型
<形式参数说明>是逗号”,”分隔的多个变量的说明形式(可以无参数)
大括弧对 {<语句序列> },称为函数体;
函数的说明就是指函数原型:在函数的定义在mian后面需要在main前面进行声明
double Power(double a,int x); double Power(double, int);
2.函数的调用(函数的使用)
函数的调用必须在声明之后!!!!!如果不想大段的声明在前面可以放后面,前面先进行声明。
函数名称(〈实际参数〉)
实参就是在使用函数时,调用函数传递给被调用函数的数据。需要确切的数据
函数调用可以作为一个运算量出现在表达式中,也可以单独形成一个语句。对于无返回值的函数来讲,只能形成一个函数调用语句。
头文件就是包含了函数原型的声明和定义,所以需要先引入头文件。
二、函数的参数传递
函数的传递方式:(非常重要且容易出错)
全局变量
复制传递方式
地址传递方式
1.全局变量
全局变量就是在函数体外说明的变量,它们在程序中的每个函数里都是可见的
全局变量一经定义后就会在程序的任何地方可见。函数调用的位置不同,程序的执行结果可能会受到影响。(并且容易变成临界区资源,所以不建议使用)
2.复制传递方式
调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化
形参是新开辟的存储空间,因此,在函数中改变形参的值,不会影响到实参
3.地址传递方式
按地址传递,实参为变量的地址,而形参为同类型的指针
被调用函数中对形参的操作,将直接改变实参的值(被调用函数对指针的目标操作,相当于对实参本身的操作)
4.二维数组的求和
数组名的本质就是指针,在传参的时候需要传数组长度。
举个例子希望大家可以理解:
int fun(int n, int m, int (*a)[m]); int main() { int a[][3] = {{1, 9, 7}, {3, 4, 6}}; int sum = 0; sum = fun(2, 3, a); printf("sum=%d\n", sum); return 0; } int fun(int n, int m, int (*a)[m]) { int i, j, ret = 0; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { ret += a[i][j]; } } return ret; }