作用域:變數名有效的範圍
存在期:變數在程式中存在的時期
.儲存方式
:auto, register, extern, static
儲存空間型別:
棧(stack):自動分配和清除的變數.如:區域性變數和函式引數等
堆(heap):由malloc等函式分配的空間
.(在c++裡這叫自由儲存區,而把new得來的空間叫做堆
)全域性/靜態儲存區:儲存全域性變數和靜態變數
.常量儲存區:儲存常量(常量字串,magic number等),不允許修改.
型別
補充
作用域
存在期
初始化
外部定義(函式外面)
全域性變數(外部變數)
為了後定義先使用:可用extern外部變數說明.
全域性全程
一次初始化
靜態外部變數
檔案全程
外部陣列
全域性全程
靜態函式
檔案n/a
n/a
普通函式
全域性n/a
n/a
內部定義(函式裡面)
靜態區域性陣列
區域性全程
一次初始化
靜態區域性變數
在函式外只能賦一次值
區域性全程
一次初始化
普通區域性變數(自動變數)
區域性區域性
凡是存在期為全程的物件(變數,陣列等)都具有」一次初始化」的特性,即只在程式開始前初始化一次(之後再遇到初始化語句就會跳過,當然其他賦值語句不會跳過
).它們都分配在全域性/靜態儲存區
.它們初始化時的右值可以是乙個初始化表示式(由文字量/符號常量/基本運算子(賦值和自增減運算子例外)組成).若沒有初始化語句,會自動置零(包括陣列).
----by bryan.wong
整理的這些東西說不定還是有疏漏,誰發現了記得告訴我一聲.順便說說乙個我在c89和c99標準中沒有找到說法的問題(不太會查ansi c標準,汗):c89允許定義static的結構體嗎?c99呢?
C 中變數生存期,作用域,儲存位置總結
首先說明一下堆和棧,棧 英文名稱是stack 是系統自動分配空間的。而堆 英文名稱是heap 則是程式設計師根據需要自己申請的空間。堆上的記憶體空間是程式執行時維護的,棧是在編譯時就確定的。所以,我們可以int p new int n 而不能int a n n為變數 儲存空間型別 棧 stack 自...
C 中的生存期和作用域
生存期和作用域,究竟有什麼樣的關係呢?先解釋一下生存期吧。乙個程序對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為 棧 堆 bss段 資料段和 段。棧 存放程式臨時建立的區域性物件。一般vc 6.0生成的可執行檔案只有1mib多的棧。堆 存放程序執行中被動態分配的記憶體段...
C語言的變數的作用域和生存期
c語言程式可以看成由一系列外部物件構成,這些外部物件可能是變數或函式。而內部變數是指定義在函式內部的函式引數及變數。外部變數定義在函式之外,因此可以在許多函式中使用。由於c語言不允許在乙個函式中定義其它函式,因此函式本身只能是 外部的 由於c語言 是以檔案為單位來組織的,在乙個源程式所有原始檔中,乙...