C語言變數和資料儲存

2021-05-02 17:21:35 字數 1893 閱讀 8713

c語言從兩個方面控制變數的性質:scope和lifetime

scope指儲存變數的**範圍

lifetime指可以訪問變數的時間範圍

作用域:

extern 整個程式

static 在函式外部說明為static的變數的作用域為從定一點到該檔案尾部;在函式內部說明為static的變數的作用域為從定一點到該區域性程式塊尾部

auto 從定義點到該區域性程式塊尾部

生存期:

extern和static變數的生存期,從main()函式被呼叫之前開始,到程式退出時為止。

auto變數的生存期從函式呼叫開始,到函式返回時為止。

第三種是動態分配的資料的生存期,它從程式呼叫malloc()或calloc()為資料分配儲存空間開始,到程式呼叫free()或程式退出時為止。

變數的儲存區域

在函式外部定義的變數(全域性變數或靜態外部變數)和在函式內部定義的static變數,其生存期就是程式執行的全過程,這些變數被儲存在資料段中。(資料段是在記憶體中為這些變數留出的一段大小固定的空間,它分為兩部分,一部分用來存放初始化變數,另一部分用來存放未初始化變數。)

在函式內部定義的auto變數(沒有用關鍵字static定義的變數)的生存期從程式開始執行其所在的程式塊**時開始,到程式離開該程式塊時為止。作為函式引數的變數只在呼叫該函式期間存在。這些變數被儲存在棧中。(棧是記憶體中的一段空間,開始很小,以後逐漸自動增大,直到達到某個預定的界限。在象dos這樣的沒有虛擬記憶體的系統中,這個界限由系統決定,並且通常很大,因此程式設計師不必擔心用盡棧空間。)

第三種記憶體空間實際上並不儲存變數,但是可以用來儲存變數所指向的資料。如果把呼叫malloc()函式的結果賦給乙個指標變數,那麼這個指標變數將包含一塊動態分配的記憶體位址,這塊記憶體位於一段名為「堆」的記憶體空間中。堆開始也很小,但當程式設計師呼叫malloc()或calloc()等記憶體分配函式時它就會增大。堆可以和資料段或棧公用一段記憶體,也可以有它自己的記憶體段,這完全取決於編譯選項和作業系統。

const指標

const指標解釋為指向const資料的指標,即它所指向的資料不能被修改。只要在指標說明的開頭加入const修飾符,就可以說明乙個const指標。儘管const指標所指向的資料不能被修改,但const指標本身是可以修改的。

volatile修飾符

volatile修飾符告訴編譯器不要對該變數所參與的操作進行某些優化。

浮點數

從數學意義上講,兩個不同數字之間有無窮個實數。計算機只能區分至少有一位bit不同的兩個數字。如果要表示那些無窮無盡的各不相同的數字,就要使用無窮數目的位。計算機只能用較少的位(通常是32位或64位)來表示乙個很大的範圍內的數字,因此它只能近似的表示大多數數字。

乙個數字型變數可以容納的最大值

要判斷某種特定型別可以容納的最大值或最小值,一種簡便的方法是使用ansi標準標頭檔案limit.h中的預定義值。

運算子公升級

當兩個不同型別的運算分量進行運算時,它們會被轉換為能容納它們的最小的型別,並且運算結果也是這種型別

不應該對用const或volatile說明了的物件進行型別強制轉換,否則程式就不能正確執行。

變數與函式

使用全域性變數或static區域性變數的函式大多數情況都不可重入(reentrant)。這意味著,如果這個函式的乙個例項正在執行時,那麼程式中其他執行執行緒就不能再呼叫它。更壞的情況是,函式的結果必須在該函式再次被呼叫之前,儲存到其他地方;否則,它將被新的結果重寫。

結構體的傳遞方式預設是值傳遞方式,即傳遞結構體給函式時,需要將整個結構體賦值一遍再傳遞給函式,這比結構體指標的傳遞慢多了。

C語言變數和資料型別總結

五 小數 六 c語言轉義字元 七 c語言識別符號 關鍵字 注釋 表示式和語句 八 c語言中的運算 九 資料型別轉換 a 123 int a 123 a 1000 a 9999 printf 格式化輸出 int a 100 int b 200 int c 300 printf a d,b d,c d ...

c語言變數儲存

記憶體中供使用者使用的儲存空間分為 區與資料區兩個部分。變數儲存在資料區,資料區又可分為靜態儲存區與動態儲存區。靜態儲存是指在程式執行期間給變數分配固定儲存空間的方式。如全域性變數存放在靜態儲存區中,程式執行時分配空間,程式執行完釋放。動態儲存是指在程式執行時根據實際需要動態分配儲存空間的方式。如形...

C語言變數儲存類別

變數除了型別屬性 int char float.外,另外乙個重要屬性就是儲存類別 系統把程式中用到的資料區分為靜態儲存區和動態儲存區。靜態儲存區 在這個區分配了空間的變數,在程式執行過程中一直存在,即相對是不變的。動態儲存區 在這個區分配了空間的變數,可能隨時被釋放,即相對是不斷變化的。c語言提供了...