C语言之变量的作用域和生命周期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hejingfang123/article/details/82318492

首先,一个词语出来,我们首先会有自己的一些见解:

作用域,域,即地域,作用的地域,在这里,可以理解为作用的范围。

生命周期,即从产生到消亡的一个过程。

下面我们看看百度百科上的解释:

作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

生命周期,就是指一个对象的生老病死。

接下来,我们带入到程序代码中来看:

变量的作用域:就是你定义的变量可以使用的代码范围

变量的生命周期:指变量在程序执行过程中的“有效期”,比如说全局变量,它在整个程序执行过程中都有效,也就是它的生命周期是整个程序执行过程;而对于一些只在函数里定义的局部变量,它只是在调用函数是有效,函数调用结束,它的生命周期也就结束了。

有的人可能区分不开这两个词,其实他们是不同的两个概念,作用域指使用的范围,生命周期指的是有效期。即作用域定义的是空间,生命周期定义的是时间。

接下来,我们深入了解一下

首先,我们说变量的作用域和生命周期,对象是变量,那么,变量有哪几种呢?

变量可以分为:全局变量,局部变量

全局变量:全局变量也称为外部变量,全局变量是可以被本程序所有对象或函数引用的变量。

局部变量:局部变量也称为内部变量,指在程序中只在特定过程或函数中可以访问的变量。

也可以这样理解,在程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

局部变量是相对于全局变量而言的。在C++、C#、Ruby这些面向对象语言中,一般只使用局部变量。面向对象编程是现在普遍采用的是软件开发方法,因此无需考虑是局部变量还是全局变量,说到变量,往往都是局部变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

举个栗子:

int a,b; /*外部变量*/

main() /*主函数*/
{
……
}
void f1() /*函数f1*/
{
……

void f2(int x,y) /*内部变量*//*函数f2*/
{
……
}
 

        从上例可以看出a、b是在函数外部定义的外部变量,都是全局变量。x、y是在函数内部定义的内部变量,都是全局变量。 a,b定义在源程序最前面,因此在f1,f2及main内不加说明也可使用;如果a,b定义在函数f1前面,要在使用前先声明。x,y是在函数f2内部定义的, 所以它们在f1内无效。所以全局变量a,b的作用域是整个程序,局部变量x,y的作用域是定义该变量的子程序,即函数f2。

说到生命周期,需要引入另外几个概念:静态变量、静态全局变量和静态局部变量

静态变量:在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量,与程序有着相同的生命周期的变量。

全局变量与静态全局变量:

全局变量(外部变量)的说明之前再冠以static 就构成了静态全局变量。

作用域:

全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

生命周期:

全局变量与静态全局变量生命周期相同,与整个程序的生命周期一样。

局部变量与静态局部变量:

 局部变量(内部变量)的说明之前再冠以static 就构成了静态局部变量。

作用域:

局部变量与静态局部变量只有局部作用域。

生命周期:

静态局部变量虽然属于局部变量,但其生命周期与整个程序的生命周期一样,只不过在用不到的时候不可见。

猜你喜欢

转载自blog.csdn.net/hejingfang123/article/details/82318492
今日推荐