C语言之函数系列Ⅱ

一、函数的调用

1.函数调用的一般形式:函数名(实参表列);

如果调用无参函数,实参表列可以忽略,但括号不能省。实参的个数和形参一般相等。实参与形参的类型应一一对应,必要时使用类型转换。

注意:不同系统中,实参的计算顺序不同。微机上一般是从右到左。为避免由此引起的混乱,一般应在调用函数前计算出实参的值。

2.函数调用的方式

①函数语句形式为:函数名(实参表列);

这种方式不要求函数带返回值,函数仅完成一定的操作。

②函数表达式:函数的返回值参与元素。

例如:

m=max(a,b);

m=3*max(a,b);

printf("Max is %d",max(a,b));

这种调用方式不能用于void型函数

3.调用函数的执行过程

①按从右向左的顺序,计算实参中各表达式的值;

②按照位置,将实参的值一一对应地传送给形参

③执行被调用函数

④当遇到return(表达式)语句时计算表达式的值,并返回主调函数

4.函数的原形说明

在程序中调用函数需满足以下条件:

①被调函数必须存在,且遵循“先定义后使用”的原则;

②如果被调函数的定义在主调函数之后(位置),可以先给出原形说明。

原形说明的形式为:类型说明 函数名(参数类型,参数类型,...);

库函数的原形说明存放在头文件(.h)中,通过使用include预处理命令将这些原形说明插入程序中

二、函数的嵌套调用

嵌套调用是指在一个函数的函数体中又调用了其它函数。

局部变量和全局变量及变量的存储类别

1.局部变量:

①在一个函数内部定义的变量

②函数的形式参数

③在某个复合语句中定义的变量

局部变量只在自己的范围内有效;如果局部变量的有效范围有重叠,则有效范围小的优先。

2.全局变量

在函数之外定义的变量(外部变量)是全局变量

全局变量的有效范围是:从定义变量的位置开始到源文件结束

在一个函数中,既可以使用本函数中局部变量,也可以使用有效的全局变量。

①利用全部变量可以在函数间传递数据。

②应尽量少使用全局变量。

③如果全局变量与局部变量同名,则局部变量优先。

3.变量的动态存储和静态存储

①静态存储变量和动态存储变量:变量的存储类别,即生存期

内存中工用户使用的存储空间包括:程序区;静态存储区:编译时分配空间;动态存储区:执行时分配空间

②局部变量的存储类别

自动变量auto

局部静态变量static

局部静态变量属于静态存储类别。在程序整个运行期间都不释放存储空间。局部静态变量在编译时赋初值(仅赋一次值)。如果定义局部静态变量时没有赋初值,编译时会自动控赋初值 。局部静态变量只能在定义它是函数内被引用(它存在但不能被其它函数使用)

寄存器变量register

计算机的寄存器的个数有限。寄存器变量对寄存器的占用是动态的。有的系统将寄存器变量转化为自动变量处理,而有的系统会自动设置寄存器变量

③全局变量的存储类别

全局变量都是静态的;

用extern说明一个在其它源文件中定义的全局变量;用static说明一个不能在其它源文件中引用的全局变量;应尽量少使用全局变量

④存储类别小结

变量的定义方法:

[存储类别]数据类型 变量名,...

变量的划分

数组作为函数的参数

1.数组元素做函数实参

与变量做实参一样,数组元素做实参是“值传递”

2.一维数组与函数参数

若函数的形参是数组,对应的实参必须是数组名

①实参数组与形参数组的类型必须一致

②用数组名做参数时,传递的数组的首地址,因此形参数组也可以不指定大小。但需另设一个参数,传递数组元素的个数

③数组做函数参数时,形参数组和实参数组共享同一内存单元

如果形参数组的元素的值被修改,实参数组的元素的值也就被 改变了

3.多维数组与函数参数

①多维数组可以作为函数的参数

②如果形参是多维数组,可以省略第一位的大小,但不能省略其它维的大小

举报
评论 0