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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章