c语言---函数

来源:互联网 发布:查看db2数据库的用户 编辑:程序博客网 时间:2024/05/08 06:20

1、函数

函数就是功能,每一个函数用来实现一种特定的功能,函数的名字应反映其代表的功能

一个c程序可由一个主函数和若干个其他函数构成

指定一个函数的类型为void ,意为函数为空类型,无函数返回值

(1)一个c程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件,对于一个较大的程序,一般不是吧所有内容全放在一个源程序文件中,而是将它们分别放在若干个源文件中,由若干个源文件组成一个程序,这样方便编写、分别编译、调试,一个源程序文件可以为多个c程序调用

(2)一个源程序文件由一个或多个函数以及其他内容组成

(3)不论main函数在程序中的什么位置,一个程序的开始都是从main函数执行,如果需要调用其它函数,调用后流程将返回main函数,在main函数结束程序

(4)所有函数都是平行的,即在定义函数时分别进行,相互独立,函数不能嵌套定义,函数可以相互调用,除了main函数

(5)从用户的角度将函数分类:

a、库函数,即由编译系统提供,用户不必定义,可以直接使用它们

b、用户自定义函数

(6)从函数的形式分类:

a、无参数函数,即主函数和被调用函数之间不发生数据的传递

b、有参函数,即在调用函数时,主调函数在调用被调用函数时,通过参数项被调用函数传递数据,执行被调用函数时会得到一个函数值,供主函数使用

2、函数的定义和调用

(1)定义函数的原因

a、指定函数的名字,方便后面按名调用

b、指定函数类型,即函数值的类型

c、指定函数的参数的名字和类型以便调用函数时向它们传递数据

d、指定函数完成什么操作,即其功能

(2)定义函数

a、定义无参函数

类型名  函数名()

{

函  数  体

}

b、定义有参函数

类型名  函数名 (形式参数类型 形式参数名,形式参数类型 形式参数名)

{

函数体

}

被调用函数类型和其返回值的类型必须相同

别调用函数在调用函数中的参数列表中的参数为实参,在调用函数外定义的参数为形参,实参和形参的个数应相等,类型匹配,按顺序对应

c、函数条用的过程

(1)在定义函数中指定的形参,在未出现调用函数时,它们并不占内存单元,发生调用时,形参被分配到内存单元

(2)将实参对应的值传递给形参

(3)由于形参已有值,可以直接进行有关运算

(4)通过return语句将函数值带回主调函数

(5)调用结束,形参单元被释放,实参单元仍保留并维持原值,没有改变,形参和实参是两个不同的存储单元

3、对别调用函数的声明和函数原型

一个函数调用另外一个函数(即被调用函数)需要具备以下条件:

(1)首先被调用函数必须是已经定义的函数(库函数或者用户自己定义)

(2)如果使用库函数,文件开头用#include命令将调用有关库函数时所需用到的信息“包含”到本文件夹中来

(3)如果使用用户自己定义的函数,该函数的位置在主调函数后面(同一文件夹),应在主调函数中对其进行函数声明

(4)函数定义和函数声明并不是一回事,定义是指对函数功能的确立,包括指定函数名、函数值类型、形参及其类型以及函数体等

而函数声明则是把函数名、函数类型、形参的类型及数目通知给编译系统

4、函数的嵌套调用和递归调用

(1)函数的嵌套调用

在被调用函数中再次调用函数,是一种递推方法,用其算n!

(2)函数的递归调用

在调用一个函数过程中直接或间接地调用该函数本身,用其算n!

5、数组作为函数参数

变量、数组元素、数组名(传递数组首元素的地址)都可以作为函数参数

(1)数组元素作为函数参数

用数组元素作为函数实参,每次调用函数时,把数组元素的值传给被调用函数,其作用和用法与变量作为函数实参一样,是值传递

(2)数组名作为函数参数

程序中用数组名作函数实参,函数的形参也应为一个数组名或指针变量,两个的数组的首地址应相同,类型应相同

6、变量的作用域

(1)局部变量(内部变量):在函数和复合语句定义的变量,只在本函数或复合语句范围内有效

a、主函数定义的变量也只能在主函数中有效,主函数也不能使用其他函数定义的变量

b、不同的函数中可以使用相同名字的变量,它们代表不同的对象,不影响,占有不同的内存单元

c、形式蚕食也是局部变量

d。在一个函数内部,可以再复合语句中定义变量,这些变量只能在复合语句中使用

(2)全局变量(外部变量):一个程序可以包含一个或若干个源程序文件,一个源程序文件可以包含一个或若干个函数,在函数之外定义的变量

a、全局变量的范围为从定义变量的位置开始到本源文件结束

b、在一个函数中即可以使用本函数中的局部变量,也可以使用有效的全局变量,但在局部变量的作用范围内,全局变量不起作用

7、变量的生存期

变量的生存期:即变量值存在的时间,一些变量在程序运行的整个过程中都存在,一些变量在调用其所在的函数时才分配存储单元,函数调用结束后,变量不存在

8、变量的存储方式

(1)静态存储方式:指在程序运行期间由系统在静态存储区分配存储空间的方式,在程序运行期间不释放,如全局变量

(2)动态存储方式:在函数定义的变量,在函数调用开始分配动态存储空间,函数结束时释放这些空间,如局部变量

每一个函数和变量有两个属性:数据类型和数据的存储类别

(3)auto------声明自动变量

函数的形参和在函数中定义的变量包括复合语句中定义的变量,都属于动态分配存储空间,称这些局部变量为自动变量,通常auto省略

auto int b,c=3;

(4)static----声明静态变量

希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用存储单元不释放,在下次函数调用时,该变量已有值

对局部变量和全局变量的作用不同,对局部变量,使由动态存储方式变为静态存储方式,对全局变量则不变,静态存储方式

9、对静态局部变量的说明:

(1)静态局部变量属于静态存储方式,在静态区分配存储单元,在程序整个运行中不释放

(2)对静态局部变量时在编译时赋初值的,即只赋初值一次

(3)在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对于数值型变量)或空字符(对字符型变量)

(4)静态局部变量在函数结束后仍存在,但其他函数不能调用

(5)用静态村粗会多占内存,降低程序的可读性

10、静态外部变量:希望某些变量只限于被本文件引用,不能被其他文件引用

11、registe----声明寄存器变量

适用于频繁调用某些变量,为了提高执行效率,允许将局部变量放在CPU的寄存器中,需要时直接从寄存器取出参加运算

12、extern----声明外部变量的作用范围

(1)如果外部变量不再文件的开头定义,则其有效范围是从定义处到文件结束,如果要在其定义前使用,则在其前加上extern

(2)将外部变量扩展到其他文件,如一个程序包含两个文件,两个文件都要用到一个变量,不能分别在两个文件中定义同一变量

0 0
原创粉丝点击