C語言中資料的儲存記憶體

來源:互聯網
上載者:User
C中的資料在記憶體的儲存可以用儲存時期、範圍和連結來體現。
  儲存時期
  儲存時期分為靜態、自動的和分配的。靜態變數一般用關鍵字static來標示(全域變數不用static也是靜態),它在程式開始執行的時候就為變數分配記憶體空間,在整個程式中一直存在。自動的用auto來標示(預設省略auto),變數的記憶體空間要在程式執行到該變數的代碼塊的時候才開始分配,在退出該代碼塊時就自動釋放了。如果是手段分配的,需要調用malloc()或者calloc()函數來開闢記憶體空間,同時也需要手動調用free()來釋放該記憶體空間,如果超出改變數的範圍還沒有手動釋放記憶體,則該塊記憶體由於無法利用而變成垃圾空間了,可能導致記憶體泄露。
  範圍
  範圍指的是那些變數可以被那些程式部分訪問。檔案範圍:在所有函數之外定義的變數具有檔案範圍,該變數可以在全部函數中可見。代碼塊範圍:在代碼塊內定義的變數或者是函數的參數變數具有代碼塊的範圍,該變數在該代碼塊或者子塊中可見。
  連結
  連結是指程式的變數可以被連結到其他那些地方。代碼塊範圍的變數是局部變數,具有空連結。檔案範圍的變數又可以分為內部連結和外部連結。內部連結只能在改檔案中可見,外部連結則可以在其他檔案中使用。
  總結,c中分為以為五種儲存的變數:
  1.自動:在一個代碼塊中聲明的變數,預設省略auto修飾符。該變數具有自動儲存時期,代碼塊範圍,空連結。注意,如果未經初始化,改變數的值不確定。
  2.寄存器:在一個代碼塊內(或者是一個函數的頭部作為參數)使用register修飾符聲明的變數。該變數具有自動儲存時期,代碼塊範圍,空連結。同自動變數一樣,未經初始化,它的值不確定。
  3.靜態、空連結:在一個代碼塊內部使用static修飾符聲明的變數。該變數具有靜態儲存時期,代碼塊範圍,和空串連。注意改變數僅在編譯的時候初始化,如果沒有初始化,則該變數的位元組都被設定為0。
  4.靜態、內部連結。該變數在所有函數之外聲明,使用static修飾符修飾。該變數具有靜態儲存時期,檔案範圍,和內部連結。它只能在改檔案中被訪問到,僅在編譯時間初始化,如果未初始化,則其位元組設定為0。
  5.靜態、外部連結。該變數在所有函數之外聲明,不使用static修飾符修飾。該變數具有靜態儲存時期,檔案範圍,和外部連結。它不僅能在改檔案中被訪問到,還可以被其它檔案訪問。它僅在編譯時間初始化,如果未初始化,則其位元組設定為0。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.