马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 6bingame 于 2024-12-9 18:44 编辑
函数中的变量
局部变量
局部变量就是在函数内部或者块内定义的变量。局部变量只在它的函数内部或块内部有效,在这个范围之外是不能使用这些变量的。
例如:int func(int a,int b) //函数func
{
double x,y;
......
}
mian()
{
int m,n;
......
}
在函数 func() 内定义了4个变量,a、b为形参,x、y为一般的变量。在 func() 的范围中,a、b、x、y都有效,或者说a、b、x、y等4个函数 func() 内是可见的。同理,m、n的作用域仅限于 main() 函数内。
关于局部变量的作用域,还要说明以下几点。
(1)主函数 main() 中定义的变量m、n只在主函数中有效,并不是因为在主函数中定义,而在整个文件或程序中有效。因为主函数也是一个函数,它与其它函数是平行关系。
(2)不同的函数中可以使用相同的变量名,它们代表不同的变量,这些变量之间互不干扰。
(3)在一个函数内部,还可以在复合语句(块)中定义变量,这些变量只在本复合语句中有效。
(4)如果局部变量的有效范围有重叠,则有效范围小的优先。
例如:void main()
{
int a,b,c;
......
{
int c;
c=a+b;
......
}
}
整个main()函数内a、b、c均有效,但程序进入函数内的复合语句中又定义了一个变量c,此时的变量与复合语句外部的变量c重名,那么在此范围内c变量优先使用。
例题1:局部变量的应用
解:#include<stdio.h>
int main()
{
int i=2,j=3,k; //变量i,j,k在 mian 函数内部均有效
k=i+j;
{
int h=8; //变量h只在包含它的复合语句中有效
printf("%d\n",h);
}
printf("%d\n",k);
return 0;
}
例题分析:
本范例中,变量只在复合语句的语句块内有效,离开该复合语句,该变量则无效。
全局变量
与局部变量相反,在函数之外定义的变量称为全局变量。由于一个源文件可以包含一个或若干个函数,全局变量可以为本文件中的其他函数所共用,他的有效范围从定义点开始,到源文件结束,全局变量又称为外部变量。
例如:
int a=2,b=5; //全局变量
int f1() //定义函数f1
{
......
}
double c,d; //全局变量
void f2() //定义函数f2
{
......
}
main() //主函数
{
......
}
int e,f; //全局变量
其中,a、b、c、d、e、f 都是全局变量,但它们的作用范围不同。在 main() 函数、函数 f1() 和函数 f2() 中,可以使用 a、b、c、d ;在函数 f2() 和 main() 函数中可以使用 c、d,但不能使用a、b。变量 e、d 不能被任何函数使用。
例题2:编写一个函数,实现同时返回10个数的最大值和最小值。
解:#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int min; //全局变量min
int find()
{
int max,x,i;
x=rand()%101+100; //产生一个[100,200]之间的随机数x
printf(" %d",x);
max=x;
min=x; //设置最大数和最小数
for(i=1;i<10;i++)
{
x=rand()%101+100; //再产生一个[100,200]之间的随机数x
printf(" %d",x);
if(x>max)
max=x; //若新产生的随机数大于最大数,则进行替换
if(x<min)
min=x; //若新产生的随机数小于最小数,则进行替换
}
return max;
}
int main()
{
int m=find();
printf("\n最大数:%d,最小数:%d\n",m,min);
return 0;
}
例题分析:
本范例中,变量min是全局变量,它的作用范围是整个源文件。程序通过返回最大值,最小值则由全局变量进行传递。由此可见,如果需要传递多个数据,除了使用函数外,还可以借助于全局变量,因为函数的调用只能带回一个返回值,因此有时可以利用全局变量增加与函数联系的渠道,从函数得到一个以上的返回值。因此,全局变量的使用增加了函数之间传送数据的途径。在全局变量的作用域内,任何一个函数都可以引用该全局变量。但如果在一个函数中改变了全局变量的值,就会影响其他函数,相当于各个函数间有直接的传送通道。 |