C语言学习笔记
之 函数调用与变量的作用域
但凡程序就离不开函数,不管是高级语言还是C语言,函数是组成程序的单位。形形×××的函数既扮演着自己的角色,又在总体中担任着举足轻重的角色。
一:函数调用
函数的基本形式:
无参数函数一般形式 | 有参数函数一般形式 |
函数类型说明符 函数名() { 函数体; } | 函数类型说明符 函数名() { 函数体; } |
以一个程序实例来阐述函数的一些注意事项。
#include |
1.每个函数必须单独定义,不允许嵌套定义,即不能在一个函数的内部再定义另一个函数
2. 形参:在进行函数定义时设定的参数
实参:在进行有参函数调用时所用的参数
3 .实参传递给形参的方式:
值传递(值单向传递方式)
如上程序中的实参a传递给形参b[],a是数组名,代表的是数组的首地址。实参数组名a并不是将数据a中所有学生的成绩传送给了形参数组b,而是将实参数组的首地址传递给了b,从而使这两个数组共用同一个存储空间,即a[0]=b[0]......
地址传递方式
如上程序中的实参n传递给了形参m ,n和m都是实实在在的值。
需要注意的是:在被调函数中,形参的类型必须与实参要一致,比如:参数的a[]是float,那么形参中的数组b[]也必须是float类型
4. 函数返回值
在被调函数内采用return语句获得函数的返回值,一个函数利用return语句只能返回一个值。
return语句中的表达式的类型应该与函数类型说明是一致的。比如:程序中的,aver函数中的return(aver1)中的aver1的类型与函数aver的函数类型一样,即都是float.
但是当return语句中的表达式的返回值类型与函数的类型不一致时候,应与函数类型说明符为准。系统会自动将return返回值转换为函数类型说明符的类型。
当函数的返回值的数据类型是int时,在函数定义时,函数类型说明符可以省略,也就是说,系统默认的返回值类型是整型。
5. 函数的声明
程序中一切都遵循先定义后使用的原则,函数也不例外。
上述程序中,aver函数定义在main函数之后,所以不遵循先定义后使用的原则,为了防止这种事情的发生,我们先用一个函数声明来避免这一点,那就是在main函数之前加上的函数声明语句:float ave(float b[],int m);
如果将函数aver放到main函数之前的话,就不用加这一条声明语句了。
二:变量的作用域
int m,n; double fun(int x ,int y) { int m,n; .... } main() { int a,b; if () { int x,y; } } |
1.局部变量
局部变量只能在局部使用。上述中的函数fun中的x,y和m,n只能在函数fun中有效,一旦出了fun的范畴就没有用了。再比如if中的x和y只能在if()中使用。
2.全局变量
第一行的m和n,就是全局变量,这两个变量在全部函数中都能使用
但是我们看到m和n和函数fun中的m和n重名了,那执行函数fun中的m和n的时候,到底用全局变量还是用局部变量,答案是局部变量。