乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      c++變量在內(nèi)存中的存儲區(qū)域

       靜聽沙漏 2012-01-03

      01 #include <iostream>
      02
      03 #include <string>
      04 using namespace std;
      05 int a = 0; // Initialization Area of Overall
      06 char *p1; // Not Initialization Area of Overall
      07
      08 void main()
      09 {
      10 int b; // stack
      11 char s[] = "abc"; // stack
      12 char *p2; // stack
      13 char *p3 = "123456"; // p3 in stack
      14 static int c =0; // Initialization Area of Static Overall
      15 p1 = new char[10];
      16 p2 = new char[20];
      17 strcpy(p1, "123456");
      18 cout<<p1;
      19 delete [] p1;
      20 delete [] p2;
      21 }

      程序說明:
      (1) 第5~6 行分別在函數(shù)體外部定義了兩個變量a 和p1,它們存儲在內(nèi)存的靜態(tài)存儲區(qū)域。
      (2) 第10~13 行定義的變量b、s、p2、p3 為局部變量,存儲在內(nèi)存的堆棧區(qū)。
      (3) 第14 行定義的變量c 為靜態(tài)局部變量,存儲在內(nèi)存的靜態(tài)存儲區(qū)域。
      (4) 第17 行使用strcpy 函數(shù),將字符串“123456”復制給指針變量p1 指向的存儲單元。第18 行的輸出結果為“123456”。
      知識點:
      (1) 當編譯一個C++程序時,計算機的內(nèi)存被分成了4 個區(qū)域:程序代碼區(qū)、全局變量區(qū)、堆棧區(qū)和堆區(qū)。堆是自由的內(nèi)存區(qū)域,可以通過new 和delete 把對象放在此區(qū)域,并可以在任何地方分配和釋放自由存儲區(qū)。
      (2) C++中的變量可以分為全局變量、靜態(tài)全局變量、靜態(tài)局部變量和局部變量。其中,全局變量、靜態(tài)全局變量和靜態(tài)局部變量都存放在內(nèi)存的靜態(tài)存儲區(qū)域,局部變量存放在內(nèi)存的棧區(qū)。
      ① 局部靜態(tài)變量。在局部變量之前加上關鍵字static,局部變量就被定義成為一個局部靜態(tài)變量。
      內(nèi)存中的位置:靜態(tài)存儲區(qū)。
      初始化:未經(jīng)初始化的全局靜態(tài)變量會被程序自動初始化為0(自動對象的值是任意的,除非被顯式初始化)。
      作用域:作用域指變量的有效范圍,當定義它的函數(shù)或者語句塊結束時,作用域隨之結束。
      注意:當static 用來修飾局部變量時,它就改變了局部變量的存儲位置,從原來的棧中存放改為靜態(tài)存儲區(qū)。但是局部靜態(tài)變量在離開作用域之后,并沒有被銷毀,而是仍然駐留在內(nèi)存中,直到程序結束,只不過不能再對它進行操作了。
      ② 全局靜態(tài)變量。在全局變量之前加上關鍵字static,全局變量就被定義成為一個全局靜態(tài)變量。
      內(nèi)存中的位置:靜態(tài)存儲區(qū)(靜態(tài)存儲區(qū)在整個程序運行期間都存在)。
      初始化:未經(jīng)初始化的全局靜態(tài)變量會被程序自動初始化為0(自動對象的值是任意的,除非被顯式初始化)。
      作用域:全局靜態(tài)變量在聲明它的文件之外是不可見的,準確地講,是從定義處開始到文件結尾。
      注意:當static 用來修飾全局變量時,它就改變了全局變量的作用域(在聲明它的文件之外是不可見的),但是沒有改變它的存放位置,還是在靜態(tài)存儲區(qū)。
      ③ 靜態(tài)函數(shù)。在函數(shù)的返回類型前加上關鍵字static,該函數(shù)就被定義成為靜態(tài)函數(shù)。
      函數(shù)的定義和聲明默認情況下是 extern 的,但靜態(tài)函數(shù)只在聲明它的文件中可見,不能被其他文件所用。
      ④ 靜態(tài)數(shù)據(jù)成員。
      內(nèi)存中的位置:靜態(tài)存儲區(qū)。
      初始化和定義:
      靜態(tài)數(shù)據(jù)成員定義時要分配空間,不能在類聲明中定義。
      靜態(tài)數(shù)據(jù)成員在程序中只能提供一個定義。靜態(tài)數(shù)據(jù)成員的初始化不能在類的頭文件中。
      訪問:
      類實例名.靜態(tài)數(shù)據(jù)成員
      類類型名::靜態(tài)數(shù)據(jù)成員
      說明:
      static 數(shù)據(jù)成員和普通數(shù)據(jù)成員一樣遵循public,protected,private 訪問規(guī)則。
      對于非靜態(tài)數(shù)據(jù)成員,每個類實例都有自己的備份。靜態(tài)數(shù)據(jù)成員被當做類的全局對象,無論這個類的對象被定義了多少個,靜態(tài)數(shù)據(jù)成員在程序中也只有一個備份,由該類類型的所有對象共享訪問。
      同全局對象相比,使用靜態(tài)數(shù)據(jù)成員有兩個優(yōu)勢:
      靜態(tài)數(shù)據(jù)成員沒有進入程序的全局名字空間,因此不存在與程序中其他全局名字沖突的可能性。
      靜態(tài)數(shù)據(jù)成員可以實現(xiàn)信息隱藏。靜態(tài)成員可以是 private 成員,而全局對象不可以。
      靜態(tài)數(shù)據(jù)成員的唯一性本質(zhì)(獨立于類的任何對象而存在的唯一實例),使它能夠以獨特的方式被使用,這些方式對于非static數(shù)據(jù)成員來說是非法的。
      ⑤ 靜態(tài)成員函數(shù)。在類的成員函數(shù)返回值之前加上關鍵字static,它就被聲明為一個靜態(tài)成員函數(shù)。靜態(tài)成員函數(shù)不能聲明為const 或volatile,這與非靜態(tài)成員函數(shù)不同。
      定義:出現(xiàn)在類體外的函數(shù)定義不能指定關鍵字static。
      作用域:主要用于對靜態(tài)數(shù)據(jù)成員的操作。
      靜態(tài)成員函數(shù)與類相聯(lián)系,不與類的對象相聯(lián)系。
      靜態(tài)成員函數(shù)不能訪問非靜態(tài)數(shù)據(jù)成員,因為非靜態(tài)數(shù)據(jù)成員屬于特定的類實例。
      靜態(tài)成員函數(shù)沒有this指針,因此在靜態(tài)成員函數(shù)中隱式或顯式地引用這個指針都將導致編譯時刻錯誤。試圖訪問隱式引用this指針的非靜態(tài)數(shù)據(jù)成員也會導致編譯時刻錯誤。
      訪問:可以用成員訪問操作符(.)和箭頭(->)為一個類實例或指向類實例的指針調(diào)用靜態(tài)成
      員函數(shù),也可以用限定修飾符名直接訪問或調(diào)用靜態(tài)成員函數(shù),而無需聲明類實例

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多