static 用法

     对于一个程序,内存分配情况如下:

      ============================

     |                      代码区                             |

    --------------------------------------------------

    |              全局数据区                              |

    -------------------------------------------------

   |                       堆区                                 |

  --------------------------------------------------

 |                        栈区                                 |

 =============================

         一般程序采用new 产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。全局变量和static 修饰的变量放在 全局数据区。

 static 的作用:

          1. 扩展了生存期

          2. 限制了作用域

         3. 实现了唯一性

 

一。 面向过程设计中的 static

        1.【静态数据全局变量】  在全局变量前加关键字 static

             静态全局变量特点;

                  1.该变量在全局数据区分配内存

                  2.未经初始化得静态全局变量被初始化为0

                 3.静态全局变量在初始它的文件中是可见的,而在文件之外是不可见的

            定义全局变量就可以实现变量在文件中共享,但是定义静态全局变量还有以下好处;

                  静态全局变量不能被其他文件所用。

                   其他文件中可以定义相同的名字,不会发生冲突。

         2. 【静态局部变量】 在局部变量前加关键字 static

                通常情况,在函数体内定义变量, 每当程序运行到该语句是, 局部变量会分配栈区内存, 当函数体结束时,系统会回收栈区内存,局部变量也就消失。

        但有时希望在两次调用函数体是, 局部变量的值给予保存。  这样 静态局部变量就可以解决这个问题。

              静态局部变量保存在 全局数据区, 特点如下:

                1.该变量在全局数据区分配内存

                2.静态局部变量在程序执行到该对象的声明处初始化,以后函数运行到此不必初始化。

                3.静态局部变量一般在声明处初始化,若不初始化,默认初始化为0

                4.它始终驻留在全局数据区, 知道程序运行结束。 其作用域是局部作用域,当其定义的函数体结束时, 其作用域也就结束

      3【静态函数】 在函数返回类型前加上static

             特点:

              1. 只能在它声明的文件中可见, 不能被其他文件使用

              2.其他文件可定义相同名函数, 不发生冲突

 

二。面向对象设计中的static (类中的static)

       1【静态数据成员变量】 在类内的成员变量前加上static, 该数据成员变量是类的静态数据成员变量。

         特点:

               1.静态数据成员被当做类的成员,无论这个类的对象被定义了多少个,静态数据成员变量只有一份拷贝,由该类型的所有对象所共享访问。

               2.静态数据成员变量存放在全局数据区, 属于本类的所有对象共享。 所以它不属于某个类对象,在没有产生类对象时其作用域就可见,

                   即在没有产生类的实例前, 就可以操作它。

           相对于全局变量,静态成员变量特点;

                           1.静态数据成员变量没有进入程序的全局名字空间, 不存在与程序中其他全局变量名字冲突的可能

                           2.可以实现信息的隐藏。 加上关键字 private 等, 全局变量则不能

 

     2.【静态成员函数】

         它为类的全部服务,而不是为某个类的具体对象拂服务。与普通函数相比, 静态成员函数由于不是与任何的对象相联系,故它不具备this指针,

从这个意义上讲, 它无法访问类的其他非静态成员函数,也无法访问类的非其他静态成员变量,只能调用其他的静态成员函数。

          特点;

               1.出现在类体外的函数定义前不能有static 关键字。

               2. 静态成员函数可以相互访问。 静态成员函数以及静态成员变量

               3. 非静态成员函数可以随便的访问 静态成员函数以及静态数据成员变量

              4.静态成员函数不能访问非静态成员函数以及非静态数据成员变量。

 

发布了19 篇原创文章 · 获赞 3 · 访问量 12万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章