彻底弄清楚,全局变量,静态全局变量,局部变量,静态局部变量

来源:互联网 发布:中日2013黑客网络战 编辑:程序博客网 时间:2024/05/16 05:26

<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:612.0pt 792.0pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:36.0pt;mso-footer-margin:36.0pt;mso-paper-source:0;}div.Section1{page:Section1;}-->

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

           全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

           这两者的区别虽在于:

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

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

           由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

           PS:这样的话,只是自己文件中使用的全局变量可以冠以static,变成静态全局变量,这样,即保证了不和其他人的重名,也达到了自己不同函数对同一变量进行操作的目的。

 

           全局变量改变为静态全局变量后是改变了它的作用域, 限制了它的使用范围。

 

 

 

 

 

 

 

按存储区域分:

      全局变量、

      静态全局变量、

      静态局部变量都存放在内存的静态存储区域

      局部变量存放在内存的栈区。

按作用域分:

      全局变量在整个工程文件内都有效;

      静态全局变量只在定义它的文件内有效;

                       从定义处开始,到本文件结束为止,我们把她定义在最前面,这样,本文件就全部可以使用

      静态局部变量只在定义它的函数内有效,只是程序仅分配一次内                                  存,函数返回后,该变量不会消失

      静态局部变量 :是为了再下一次进入其所属函数时,变量的值仍保持上一次的值.

      局部变量在定义它的函数内有效,但是函数返回后失效。

          

           局部变量改变为静态局部变量后是改变了它的存储方式即改变了它的生存期。

          

 

 

 

 

 

 

A      静态数据区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化。

            如函数中的全局变量,静态变量(静态全局变量,静态局部变量)就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在。

注意:

           初始化的全局变量,静态变量(静态全局变量,静态局部变量)在一块区域。

           未初始化的全局变量,静态变量(静态全局变量,静态局部变量)在相邻的另一块区域;同时未被初始化的对象存储区可以通过void*来访问和操纵,程序结束后由系统自行释放。

 

B   代码区:存放函数体的二进制代码;

 

C   栈区:存放自动变量

        在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元由编译器自动释放,超出其作用域外的操作没有定义。

           栈内存分配运算内置于处理器的指令集中,效率很高,但分配的内存容量有限。栈存放函数的参数局部变量的值等。

 

D   堆区(自由存储区):

           在运行的时候调用函数(如C中的mallocC++中的new)分配内存,可以在任何时候决定分配内存及分配的大小,用户自己负责在何时释放内存(如用freedelete)。

           堆中的所有东西都是匿名的,这样不能按名字访问,而只能通过指针访问。

 

 

           static函数与普通函数作用域不同。仅在本文件。

           只在当前源文件中使用的函数应该说明为内部函数(static)内部函数应该在当前源文件中说明和定义。

           对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.

.sh文件无法运行可能是权限问题

原创粉丝点击