1.2 全局变量和局部变量
全局变量,也称外部变量,在函数体外定义,不是哪一个函数所特有的。全局变量又可以分为外部全局变量和静态全局变量,它们之间的最大区别在于,使用static存储类别的全局变量只能在被定义的源程序文件中使用,而使用extern存储类别的全局变量不仅可以在被定义的源程序文件中使用,还可以被其他源文件中的函数引用。如果要在函数中使用全局变量,那么通常需要作全局变量说明。只有在函数内经过说明的全局变量才能使用。但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。例如:
include<stdio.h>
int a=0;
void print(void)
{
printf("global variable a=%d\n",a);
}
int main(void)
{
print();
return 0;
}
因为全局变量a在print()函数之前定义,所以在print()函数中使用a时无需说明,但是下面的代码在运行时会出错。
include<stdio.h>
void print(void)
{
printf("global variable a=%d\n",a);
}
int a=0;
int main(void)
{
print();
return 0;
}
因为全局变量a的定义出现在print()函数之后,所以在print()函数中使用a时需要说明,应该在print()函数的printf语句上面加一句“extern int a;”来说明,这样才可以使用全局变量。
局部变量是相对于全局变量而言的,即在函数中定义的变量称为局部变量。当然,由于形参相当于在函数中定义的变量,所以形参也是一种局部变量。我们可以通过图1-2来说明全局变量和局部变量的定义区域。
图 1-2 全局变量和局部变量的定义区域