c语言中的局部变量与全局变量

来源:互联网 发布:sql 错误2 编辑:程序博客网 时间:2024/05/22 04:34

我们知道函数中的形参变量只有被调用的时候才分配内存单元,调用结束立即释放。这说明形参变量只有在函数内部才有效,离开函数就不能使用了。这种变量的有效性范围叫做变量的作用域。c语言中的变量按作用域范围可以分为局部变量和全局变量两种。

1.局部变量

变量在函数内部定义,则变量具有从定义位置开始到函数结束为止的局部作用域。如果变量在某个复合语句内定义,变量具有从定义位置开始到复合语句结束为止的局部作用域,这样具有局部作用域的变量称为局部变量或内部变量。

例如:

int func( int a)                                     形参a的作用域起点

{

    int b,c;                                              局部变量b,c的作用域起点

    if(b>a)

{

int x,y;                                                    局部变量x,y的作用域起点

x = 2;

......

}                                                             局部变量x,y的作用域终点

......

}                                                             形参a以及局部变量b,c的作用域终点

int main()

{

 int i,j;                                                    局部变量i,j的作用域起点

.....

}                                                              局部变量i,j的作用域终点

在这里我们需要注意一下几点:

(1)主函数中定义的变量只能在主函数中使用,不能在其他函数中使用,同样主函数也不能使用其他函数中定义的变量,主函数与其他函数是一种平行关系。

(2)形参被调函数的局部变量,实参是主调函数的局部变量。

(3)允许在不同函数中使用同名的变量,但是这些变量代表不同的形象,分配不同的单元,互不干扰。

(4)在函数的复合语句中也可以定义变量,其作用域只在复合语句范围内。


局部变量有4中变量类型

(1)自动变量:在函数内定义,在函数内部有效,离开函数值就消失,是一种动态存储。

(2)局部静态变量:在函数内定义,在函数内有效,离开函数值仍保留,是一种静态存储。

(3)寄存器变量:在函数内定义,函数内有效,离开函数,值就消失,是一种寄存器存储。

(4)形参:函数被调用时定义,函数内部有效,离开函数值就消失,是一种动态存储。


2.全局变量

变量在所有函数的外部定义,其变量具有全局作用域,作用范围从变量的定义。位置开始到变量所在源文件结尾结束。具有全局作用域的变量叫做全局变量或外部变量。

全局变量的注意事项:

(1)使用全局变量可以增加各个函数之间的数据传输渠道,在一个函数中改变一个全局变量的值,在另一个函数中就可以利用。

(2)函数在执行时要依赖其所在的外部变量,如果将一个函数移植到另外一个文件中,还需要将有关的外部变量一起移植过去。如果外部变量与文件中的变量同名时就会出现问题,所以函数的全局变量会降低程序的可移植性,所以要慎用。

(3)如果在同一个源文件中局部变量与全局变量同名,在局部变量的作用域范围内,全局变量不起作用。


全局变量有两种变量类型

(1)外部静态变量:函数外用static 定义,从定义点到程序结尾都有效,程序运行结束值才消失,在本文件内有效,是一种静态存储。

(2)非静态外部变量:函数外定义,从定义点到程序结尾都有效,程序运行结束值才消失,其他文件可以引用,是一种静态变量。


0 0