c89 中的變數生存期,作用域,儲存位置總結

2021-06-16 01:54:03 字數 1138 閱讀 4754

作用域:變數名有效的範圍

存在期:變數在程式中存在的時期

.儲存方式

: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語言 是以檔案為單位來組織的,在乙個源程式所有原始檔中,乙...