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

2021-05-28 12:53:58 字數 771 閱讀 3968

首先說明一下堆和棧,棧(英文名稱是stack)是系統自動分配空間的。而堆(英文名稱是heap)則是程式設計師根據需要自己申請的空間。

堆上的記憶體空間是程式執行時維護的,棧是在編譯時就確定的。 所以,我們可以int* p=new int[n],而不能int a[n](n為變數)。

儲存空間型別: 棧(stack): 自動分配和清除的變數.如:區域性變數和函式引數等

堆(heap): new得出來的空間。

全域性/靜態儲存區:儲存全域性變數和靜態變數。

常量儲存區:儲存常量,不可以修改。

儲存空間的排布由作業系統決定(依賴於作業系統怎麼規定自己的可執行檔案的格式)

型別 補充

作用域

存在期

初始化

外部定義(函式外面)

全域性變數(外部變數)

為了後定義先使用:可用extern外部變數說明. 全域性

全程一次初始化

靜態外部變數

檔案 全程

外部陣列

全域性 全程

靜態函式

檔案 n/a

n/a

普通函式

全域性 n/a

n/a

內部定義(函式裡面)

靜態區域性陣列

區域性 全程

一次初始化

靜態區域性變數

在函式外只能賦一次值 區域性

全程一次初始化

普通區域性變數(自動變數)

區域性 區域性

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

作用域 變數名有效的範圍 存在期 變數在程式中存在的時期 儲存方式 auto,register,extern,static 儲存空間型別 棧 stack 自動分配和清除的變數.如 區域性變數和函式引數等 堆 heap 由malloc等函式分配的空間 在c 裡這叫自由儲存區,而把new得來的空間叫做堆...

作用域與生存期

1.作用域 作用域指識別符號能夠被使用的範圍 只有在作用域內識別符號才可以被使用。在此階段針對編譯和鏈結過程。1 函式中定義的識別符號,包括形參和函式體中定義的區域性變數,作用域都在函式內,也稱作函式域。2 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,作用域為從定義處到...

C 中的生存期和作用域

生存期和作用域,究竟有什麼樣的關係呢?先解釋一下生存期吧。乙個程序對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為 棧 堆 bss段 資料段和 段。棧 存放程式臨時建立的區域性物件。一般vc 6.0生成的可執行檔案只有1mib多的棧。堆 存放程序執行中被動態分配的記憶體段...