来源(博客频道 - CSDN.NET)

From: http://blog.csdn.net/hflyingheart/article/details/1752238

C++ (二)全局变量、局部变量及静态变量(static)的区别

标签: 存储编译器

2007-08-21 00:21 2760人阅读

分类: 工作学习(9)

版权声明:本文为博主原创文章,未经博主允许不得转载。

1。全局变量中static全局变量和普通全局变量的区别:

相同点:

1)共存于同一块内存(静态存储区)中;

2)生命期相同,都是到整个程序的生命期;

不同点:

1)前者是内部连接,后者是外部连接;

2)作用域不同:

前者的作用域是局部于它所在的文件的,也就是说在当前程序中其它文件中是不能使用它的,如果想在想其它文件中声明它为extern的来访问它,编译器就会报错,当然在其它文件中即使有同名的变量也不会有名字冲突的问题;

后者的作用域是整个程序中的所有文件,可以在其它文件中声明它为extern来访问它,当然在整个程序中不论是否是同一个文件都不能有同名的普通全局变量,否则会有名字冲突,(如果在一个函数体内有与全局变量同名的局部变量,那么局部变量会屏蔽全局变量,除非使用作用域运算符:: );

2。局部变量中的static变量和普通变更的区别:

相同点:作用域相同,都是局部于当前所在的函数体内。

不同点:

1)前者是内部连接,后者没有连接,因为普通局部变量是位于堆栈中,连接器不知道它们;

2)存储区域不同:前者存放于静态存储区,后者存放于栈中;

3)生命期不同:前者是整个程序的生命期,后者是所在函数的生命期(即随它所在的函数调用的结束而结束;

4)初始化:前者只在函数第一次被调用时初始化,当次调用时的变量值会保存到下次调用时使用,也就只初始化一次;后者则是在每次调用函数时都要重新创建它的存储空间,重新初始化一次,即调用一次函数初始化一次。

以上只是个人理解,欢迎各位对不对之处进行指正,小菜鸟在此先谢啦!

先写这些,太困了,明天继续,连同对对内存分区的理解一同写完。

Link: http://www.asm32.net/article_details.aspx?id=7209