iOS开发系列----C语言(函数)
函数概述
1.为什么需要函数
当大型程序中,某个功能,会被反复利用,我们把这些功能【封装】成功能模块,称为函数。以后想使用这个功能,只需调用这个函数就可以了。使用函数可以降低开发成本,利于维护
2.函数的分类
库函数:由官方或者第三方库编写的函数,保存在动态库,静态库,甚至是开源代码。程序员可以直接调用。使用库函数时往往伴随着导入库或者导入头文件。如arc4random()在stdlib库中,需要头文件支持,通常不能修改。
自定义函数:我们自己根据项目需要写的函数。
3.函数由最简单的函数(无参数无返回值函数)、带参数和返回值的函数两类构成。
函数讲解
1.最简单的函数:左边的void(空),表示没有返回值,中间的func是标识符,表示【函数名】,右边括号里的void没有【参数】。声明和实现是创造一个函数,调用(使用)是使用函数。
//函数的声明 void func(void); int main(int argc, const char * argv[]) { //函数的调用 func(); return 0; } //函数的实现 void func(void) { printf("hello world\n"); }
2.函数的传参
/* 如果函数在调用之前实现,就不需要声明 * @param a叫做这个函数的形参,形参是变量。传参的过程a = 5,a=2就是把值赋给变量的过程。 */ void func(int a) { for (int i = 0; i < a; i++) { printf("hello world\n"); } } int main(int argc, const char * argv[]) { func(5);//值,函数的实参,实参是值 func(2); return 0; }
3.带返回值和带参数的函数:
//它的返回值是变量(int),参数列表是两个变量(int,int) int addHT(int a,int b) { return a + b; } int main(int argc, const char * argv[]) { int a = 5; int b = 3; int c; //让c等于这个函数的返回值 c = addHT(a, b); printf("%d\n",c); printf("%d",addHT(a, b)); return 0; }
4.作用域:变量的作用域(有效范围)是大括号之内,出了作用域就没有用了
void func(void) { int a; { int b; //只能在此大括号内对变量b进行操作 } //只能在此大括号内对变量a进行操作 }
5.全局变量:声明在所有函数之外的变量,称为全局变量,作用域是从声明开始一直到文件尾。数据段的数据,默认为0
//全局变量,从声明开始一直到文件尾 int a; void ret(void) { a = 5; } int main(int argc, const char * argv[]) { ret(); printf("a = %d\n",a); a = 8; printf("a = %d\n",a); return 0; }
6.静态变量:
①函数体内static变量的作用范围为该函数体,该变量只被分配一次,其值在下次调用的时候扔维持上次调用的值。
②模块内的static全局变量可以被模块内的所有函数访问,但不能被模块外的其他函数访问。
③模块内的static函数只能被该模块内部的其他函数调用,这个函数的使用范围被限制在该模块内部。
static int situationNum = 5; void test(void) { static int partNum = 5; partNum++; situationNum++; printf("testPartNum = %d\n",partNum); printf("testSituationNum = %d\n",situationNum); } int main(int argc, const char * argv[]) { test(); test(); situationNum++; printf("mainSituationNum = %d\n",situationNum); return 0; }
小练习
1.编写函数,求4个数的平均值。
2.编写函数,打印三个数的最大值 。(三目运算符: a>b?a:b的含义是如果a>b是a否则是b)。
参考答案(一万个读者有一万个哈姆雷特,一万个程序员有一万种编码风格,答案仅供参考)
1.编写函数,求4个数的平均值。
void mean(int a,int b,int c,int d) { printf("%d",(a+b+c+d)/4); } int main(int argc, const char * argv[]) { mean(10,20,30,40); return 0; }
2.编写函数,打印三个数的最大值 。(三目运算符: a>b?a:b的含义是如果a>b是a否则是b)。
void maxOfThree(int a,int b,int c) { printf("%d",(a>b?a:b)>c?(a>b?a:b):c); } int main(int argc, const char * argv[]) { int a = 5; double b = 15.4; float c = 0.003; maxOfThree(a, b, c); return 0; }