c语言编程认识函数(C语言之函数系列Ⅱ)
c语言编程认识函数(C语言之函数系列Ⅱ)例如:②函数表达式:函数的返回值参与元素。2.函数调用的方式 ①函数语句形式为:函数名(实参表列);这种方式不要求函数带返回值,函数仅完成一定的操作。
一、函数的调用
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.多维数组与函数参数
①多维数组可以作为函数的参数
②如果形参是多维数组,可以省略第一位的大小,但不能省略其它维的大小