首页 > 代码库 > C-函数

C-函数

1.C的设计原则是把函数作为程序的构成模块。

2.函数是完成特定任务的程序代码的自包含单元。函数一般有两个功能,执行某些动作;返回一个值以供调用程序使用。

3.使用函数的好处,代码重复利用;是程序更加模块化。

4.通常把函数看作黑盒子,对于一定的输入会产生特定的结果,而不用考虑内部实现,除非是函数的编写者。这样看待函数有助于把精力放在程序整体设计而不是具体实现细节。

5.编写函数需考虑函数要的功能和函数与程序整体上的关系。

6.函数的声明(ANCI C函数原型),告诉编译器函数的类型,且需要在其他地方找到该函数的定义。

函数的定义,函数的具体实现,确切的指定了函数的具体功能。

函数的调用,导致该函数被执行。

函数必须先声明后使用。函数定义在调用之前,可不声明,函数定义在调用之后或在其他文件中,那么调用之前必须先声明。被调用函数声明可在调用函数之外,也可在调用函数内任何可以放置变量声明的位置。

7.函数声明(ANCI C函数原型)

返回值类型  函数名(形参类型1  参数名1,形参类型2  参数名2);)(声明了函数名,函数返回值类型,函数参数个数和类型)

返回值类型  函数名(形参类型1,形参类型2);(省略参数名)

int prinf(char *, ...);//不确定参数函数的声明

void aaa(void);//无参数无返回值函数的声明

int bbb(int m, int n);

int bbb(int, int);

旧式函数声明:

void aaa();

int bbb();(只需要声明函数返回值类型,不需要参数信息)

ANCI C函数原型的好处,通知编译器更多信息,使其在编译函数调用语句时能检查更多错误。

8.函数定义

返回值类型 函数名(形参类型1  参数名1,形参类型2  参数名2)//函数头

{

  //函数体

}

int bbb(int  m, int  n)

{

  //函数体

}

形式参量(形参)和定义在函数内部的变量一样,是局部变量,是函数私有的。即时在函数外部使用同名的变量,也不会有任何冲突,它们是同名的,相互独立的,互不相关的。

旧式函数定义:

int bbb(m , n)

int m,n;

{

  //函数体

}

 

9.函数调用

函数名(实参1, 实参2);

aaa();

bbb(12, 5);

形式参量(形参)是被调用函数中的变量(在函数头中声明),实际参数(实参)是调用函数传递给被调用函数的形参的特定数值。传递是复制操作,就是说被调用函数中对复制数值做的任何操作,都不会影响调用函数中的原数值。

函数调用的时候,将创建形参(局部变量),并将用实参作初始化。

 

10.使用return语句从函数中返回一个值,并终止函数的执行,将程序控制权交给调用函数的下一条语句。一般是函数体最后一条语句。该值就是函数的返回值,被存储在一个匿名变量中。因此,函数调用语句可用来赋值和参与运算。

若return返回的值类型与函数定义的返回值类型不一致,会被自动转换成定义的返回值类型。

函数之间的关系,调用与被调用;函数之间通过参数与返回值进行通信。C中所有函数同等地位,都可以调用其他函数或着被调用。

 

11.C允许一个函数调用其自身,这种调用过程称为递归。

递归原理:

每一级函数都有自己的私有变量;

每一次函数调用都会有一次返回;

函数中,位于递归调用前的语句和各级被调用函数拥有相同的执行顺序,位于递归调用之后的语句与各级被调用函数执行顺序相反;

虽然每一级函数都有自己的私有变量,但函数代码并不会得到复制;

递归函数中必须包含可以终止递归调用的语句。

 

尾递归,就是把递归调用放在函数末尾,return语句之前。尾递归的作用相当于循环语句。

 

递归的缺点,会很快占用大量内存。

 

12.多源代码文件的编译

main函数在一个源文件中,自定义函数在一个源文件中,函数原型和常量定义放在头文件中。

 

13.指针

指针就是内存地址,表现为无符号整数,通常是16进制格式。

指针变量(简称指针)是存放地址的变量。

指针的声明:

int * point;//指向一个整数变量的指针,数据类型是int *,*表示point是指针变量,int表示point指向一个整数变量。

char * chr;//指向一个字符变量的指针

float * flt;//指向一个单精度浮点数变量的指针

 

指针运算符:间接运算符(取值符)*,地址运算符(取地址符)&

&后跟一个变量名,&给出变量的地址,*后跟一个指针变量或地址,*给出存储在被指向地址中的值。

 

int a = 10, b;

int * point, * point2;

point = &a;

b = *point;

 

编写程序时,变量有三个属性,变量的名字,类型,数值;编译加载后,变量有两个属性,地址和数值。变量的地址可以看作在计算机中的名称。

 

14.指针作为函数的参数

将调用函数变量的指针作为实参传递给被调用函数的形参,可以改变调后函数的变量。

不要将被调用函数变量的指针作为返回值传递给调用函数,因为局部变量的生命周期在被调用函数执行完就结束了,被释放了,调用函数后续使用该值回造成错误。

 

C-函数