小白学编程之函数
函数在很多小白眼里感觉没多大作用,但是函数作为一个执行体,理论上来说,不用函数也可以。但是如果在程序中需要多次用到这个代码块,就需要些很多冗余的代码。另外,函数的使用可以使得你的程序看起来逻辑比较好。下面我们就来看看函数。
函数定义
函数类型 函数名 (形式参数表)
{
函数实现的过程
}
例求圆柱体体积
double cyliner(double r, double h){
double ret;
ret = 3.14 * r * r * h;
return ret;
}
在上述的函数中return的作用有两个,第一是结束函数的运行,第二是带着运算结果(表达式的值)返回到主函数
注意:return只能返回一个值。
函数的调用
任何c语言执行,首先从主函数main()开始,如果遇到某个函数调用的话,主函数就会暂停执行,转而执行相应的函数,该函数执行过后再返回主函数,然后从原先暂停的主函数位置继续执行。
函数声明
函数要先定义后调用,如果自定义函数放在主函数的后面,那么需要在函数调用之前,加上函数声明。
函数声明定义
函数类型 函数名 (参数表)
例上述求圆柱体体积
double cylinder (double r, double h);
注意:其中的变量名(r,h)可以省略
函数声明一般放在头文件和主函数之间。
函数定义和函数声明的区别:声明是一条c语言;而定义时的函数首部不是语句所以不能加分号。
函数的优点
1、程序的结构清晰,逻辑关系明确,程序的可读性强。
2、解决相似问题时不用重复编写代码,可通过调用函数解决,减少代码量。
3、利用函数实现模块化编程,各模块功能相对独立,利用“各个击破”,可以降低调试的难度。
参数传递
数值传参
按数值传递参数,改变形参的大小,不会影响实参的本身。
地址传参
按地址传递参数,把实参变量的地址传送给被他调用的函数。实参和形参共用一个地址,形参改变的话,实参也会改变。
传递数组的条件
1、数组首元素的地址
2、数组元素的个数
例
void function(int a[], int x)
分析上述的例子
int a[ ]-------->代表的是形参接收一个整型数组的首元素地址
int n ---------->代表的是形参接收元素的个数
函数指针:
本质就是一个指针变量,保存的是函数的入口地址
函数指针的用法:
返回值类型(*p)(参数表)
例
int (*pfun)(int , double);
例子分析:
pfun是一个函数指针,保存有两个参数,分别是整型和浮点型,返回值是一个整型函数的入口地址(函数名就是函数的入口地址)。
函数的调用方式
1、函数名调用
2、通过函数指针回调函数
函数指针回调函数
例:
fun(); //函数名
void (*pfun)() //函数指针
pfun = fun; //选择不同的函数名,函数指针执行不同的函数
pfun();
指针函数
本质是一个函数,返回值是指针类型的函数
注意:如果返回值是指针类型,要返回一个有效的地址,返回局部的地址是没有意义的。