我也不知道什么时候该讲这个问题,其实觉得一开始就应该讲这个问题,但又觉得不太形象,所以我决定函数讲完后就应该让大家了解一下作用域的问题。
概述
当变量或者函数等声明时,它只有在程序的一定区域才能被访问。这个区域就是这个函数或者这个变量的作用域。
我们以下列代码来讲述作用域的问题:
#include<stdio.h>
int a;
void swap(int &d,int &e);
int largest_common_divisor(int b,int c);
int Least_common_multiple(int d,int e);
void swap(int &d,int &e)
{
int temp=d;
d=e;
e=temp;
}
int largest_common_divisor(int b,int c)
{
int temp;
if(b<c)
{
swap(b,c);
}
while(b%c!=0)
{
temp=c;
c=b%c;
b=temp;
}
return c;
}
int Least_common_multiple(int d,int e)
{
int sum=d*e;
return sum/largest_common_divisor(d,e);
}
int main()
{
int x,y;
scanf("%d%d",&x,&y);
printf("最大公约数为%d\n",largest_common_divisor(x,y));
printf("最小公倍数为%d\n",Least_common_multiple(x,y));
return 0;
}
这个程序是实现输入两个数求最大公约数和最小公倍数。这里主要讨论作用域的问题。
第三行的int a,在所有代码以外,是全局变量。也就说在下面的所有代码块中都可以对它进行赋值等等的操作。
而函数中声明的变量和函数的形参,都只在函数本身块中使用,超过函数本身变量就失效了
大家可以自行体会一下这段程序以及变量的作用域。
函数同样也有作用域,如果我不在最前面写下下面的内容,函数的调用也可以能有问题。
void swap(int &d,int &e);
int largest_common_divisor(int b,int c);
int Least_common_multiple(int d,int e);
在上一章我讲了函数的声明方式,他其实类似变量,如果我没有上面这一段函数声明(一般在开发中这些声明是放在自定义的头文件里的),又恰巧我把最大公约数(largest_common_divisor)和最小公倍数(Least_common_multiple)的函数对调一下的话,编译器就会报错说不知道最大公约数这个函数(未定义),所以作用域这个问题也是不可忽略的。
总结
本章介绍了变量和函数的作用域问题,其实觉得自己写的不是太好,但是自己也没有想到太好的例子来讲这个东西,所以我们就先这样提一下,有这个意识,后面大家就会去注意这个问题了。