6.2.2 函数变量的作用域

函数变量的作用域是指函数的形参变量以及内部定义的变量的有效作用范围。关于函数变量的作用,有以下几点说明。

❑在C51中,可以在各个层次的函数开头处声明变量,而且只允许在一个函数体的开头处声明变量。示例如下。


void Fun(int n)//定义函数Fun1

{

n=n+10;//重新赋值n

int m=10;//此处声明变量是错误的

printf(“in Fun1 n=%d\n”,n);//输出Fun1中的n

}


该例中,在程序执行语句之间定义了变量,在编译时会提示错误。正确的做法是将该定义语句放在该函数的开头。

❑函数变量定义在函数内部,函数变量的作用域也只在该函数内有效。当函数执行完毕后,函数变量及其分配的内存空间都会消失。

❑由于函数变量作用域的不同,一个函数中声明的变量即使与另一个函数中的变量既同名又同型,程序执行时,变量之间也不会相互干扰,使用全程变量除外。

函数变量的作用域的程序示例如下。


include<stdio.h>//头文件

void Fun1(int n)//自定义函数Fun1

{

n+=10;//重新赋值n

printf(“in Fun1 function n=%d\n”,n);//输出Fun1中的n

}

void Fun2(int n)//自定义函数Fun2

{

n*=n;//重新赋值n

printf(“in Fun2 function n=%d\n”,n);//输出Fun2中的n

}

void main()//主函数

{

int n;

n=5;

printf(“in main function n=%d\n”,n);//输出主函数中的n

Fun1(n);//调用Fun1函数

Fun2(n);//调用Fun2函数

printf(“in main function n=%d\n”,n);//输出主函数中的n

}


该程序可以在KeilµVision3编译环境中执行,运行的结果如下。


in main function n=5

in Fun1 function n=15

in Fun2 function n=25

in main function n=5


在本例中,先定义了函数Fun1()和函数Fun2()。主函数中声明并初始化整型变量n,然后依次调用函数Fun1和函数Fun2。在这两个函数均有返回值,分别输出执行后函数的值。函数Fun1()、函数Fun2()和主函数中的变量都是整型变量n,但是变量由于作用域不同,各函数变量的作用域只在其函数内部有效,因此其值互不影响。