您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记【函数】函数调用与变量的作用域

2013-08-05 13:23 716 查看

C语言学习笔记

之 函数调用与变量的作用域但凡程序就离不开函数,不管是高级语言还是C语言,函数是组成程序的单位。形形色色的函数既扮演着自己的角色,又在总体中担任着举足轻重的角色。

一:函数调用

函数的基本形式:
无参数函数一般形式有参数函数一般形式
函数类型说明符 函数名(){ 函数体;}函数类型说明符 函数名(){ 函数体;}
以一个程序实例来阐述函数的一些注意事项。
#include <stdio.h>
float ave(float b[],int m); //函数声明
main()
{
float a[20],aver;
int j,n;
printf("输入班级的人数\n");
scanf("%d",&n);
printf("输入分数:\n");
for(j=0;j<n;j++)
{
scanf("%f",&a[j]);
}
/*
调用ave函数,a和n是实参,a是数组名,代表数组首地址,n是值。
*/
aver=ave(a,n);
printf("平均分是 %f\n",aver);
}
float ave(float b[],int m)//函数ave b[]和m是形参,数组b的接受的是a[]的首地址,m接受n的值
{
int i;
float aver1,sum=0;
for(i=0;i<m;i++)
{
sum+=b[i];
}
aver1=sum/m;
return(aver1);//返回平均值给main函数,用来输出
}



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的时候,到底用全局变量还是用局部变量,答案是局部变量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 函数调用
相关文章推荐