10 C高階之變數和常量

2021-07-10 11:06:02 字數 2259 閱讀 5731

10.1.變數和常量及基本概念

(1)變數即在程式的執行過程中可通過**改變其值的量。常量即在程式的執行過程中永不改變的量。

(2)作用域:起作用的區域,也就是可以工作的範圍。**塊:所謂**塊,就是用{}括起來的一段**。資料段:資料段存的是數,像全域性變數就是存在資料段的。**段:存的是程式**,一般是唯讀的。棧(stack):先進後出,c語言中區域性變數就分配在棧中。

(3)判斷乙個變數能不能使用,有沒有定義:首先該變數定義的作用域是否包含當前位置;其次變數必須先定義後使用。

10.2.區域性變數

(1)區域性變數即定義在函式中的變數。分為普通區域性變數、靜態區域性變數、暫存器區域性變數。

(2)普通區域性變數定義在函式內直接定義,或者在定義前加auto關鍵字。其生命週期開始於在函式中被定義時,結束於函式執行結束後。其作用域為定義開始處到函式末尾。每呼叫一次函式,普通區域性變數就會被重新定義和初始化。

(3)靜態區域性變數定義也是在函式內部的,但是其前面要加static關鍵字來標識。其生命開始於在函式中被定義時,結束於整個程式執行結束後。其作用域為整個函式。靜態區域性變數只定義和初始化一次,以後呼叫時值保持上次不變。

(4)暫存器區域性變數定義在函式內部,但是其前面要加register關鍵字來標識,該變數的表現與普通區域性變數類似。c語言的執行時環境承諾會盡量將register型別的變數放到暫存器中去執行(普通變數是在記憶體中),所以register型別的變數訪問速度會快很多。但是首先暫存器數目是有限的,所以register型別的變數不能太多;其次register型別變數在資料型別上有限制,譬如你就不能定義double型別的register變數。一般只在核心或者啟動**中,需要反覆使用同乙個變數這種情況下才會使用register型別變數。

10.3.全域性變數

(1)全域性變數即定義在函式外面的變數。分為普通全域性變數、靜態全域性變數。

(2)普通全域性變數就是平時使用的,定義前不加任何修飾詞。普通全域性變數可以在各個檔案中使用,可以在專案內別的.c檔案中被看到,所以要確保不能重名。

(3)靜態全域性變數就是用來解決重名問題的。靜態全域性變數定義時在定義前加static關鍵字,告訴編譯器這個變數只在當前本檔案內使用,在別的檔案中絕對不會使用,這樣就不用擔心重名問題。

(4)函式和全域性變數在c語言中可以跨檔案引用,即它們的鏈結範圍是全域性的,具有檔案鏈結屬性。總之意思就是全域性變數和函式是可以跨檔案看到的。若在別的檔案中使用函式或者全域性變數需要先宣告。

10.4.區域性變數和全域性變數的對比

(1)定義同時沒有初始化,則區域性變數的值是隨機的,而全域性變數的值是預設為0.

(2)使用範圍:全域性變數具有檔案作用域,而區域性變數只有**塊作用域。

(3)生命週期:全域性變數是在程式開始執行之前的初始化階段就誕生,到整個程式結束退出的時候才死亡;而區域性變數在進入區域性變數所在的**塊時誕生,在該**塊退出的時候死亡。

(4)變數分配位置:全域性變數分配在資料段上,而區域性變數分配在棧上。

10.5.const關鍵字修飾的唯讀變數

(1)const和指標結合,共有4種形式:

const int *p; const修飾*p,p是指標,*p是指標指向的物件,不可變。

int const *p; const修飾*p,p是指標,*p是指標指向的物件,不可變。

int *const p; const修飾p,p不可變, p指向的物件可變。

const int *const p; 前乙個const修飾*p,後乙個const修飾p,指標p和p指向的物件都不可變。

(2)先忽略型別名(編譯器解析的時候也是忽略型別名),我們看const離哪個近,離誰近就修飾誰。

10.6.巨集定義常量和列舉常量

(1)使用#define定義的常量,又稱為符號常量。譬如:define n (20),n即為符號常量。

(2)列舉常量(enum)是巨集定義的一種替代品,在某些情況下會比巨集定義好用。

10.

static

/* * 公司:***x

* 部落格:

* github:

* 專案:c高階之變數和常量

* 功能:靜態區域性變數和區域性變數的區別。

*/#include

// 函式宣告

int func_auto(void);

int func_static(void);

int main(int argc, char **argv)

return0;}

int func_auto(void)

int func_static(void)

C 之變數和常量

c 中每個變數都有指定的型別,型別決定了變數儲存的大小和布局,該範圍內的值都可以儲存在記憶體中,運算子可應用於變數上。變數的名稱可以由字母 數字和下劃線字元組成。它必須以字母或下劃線開頭。大寫字母和小寫字母是不同的,因為 c 是大小寫敏感的。型別描述 bool 儲存值 true 或 false。ch...

Python基礎之變數和常量

將運算得到中間結果暫存到記憶體,以便後續程式呼叫。變數的命名規則 1.變數由字母 數字 下劃線搭配組合而成 2.不能以數字開頭,更不能全是數字 3.不能是python中的關鍵字,這些符號和字母已經被python占用,不能使用 4.不能用中文 5.名字要有意義 6.不要太長 命名規範 下劃線 每個單詞...

C語言之變數與常量

關於變數 常量 型別和運算子等。2.1 變數名 變數名由字母和數字組成,首字母必須是字母,下劃線 看作是字母,所以可以放在首字母。但是,盡量不用用下劃線作為首字母,因為在庫函式中經常這樣命名。變數名用小寫字母,符號常量用大寫字母。變數名字的選擇需要根據實際目的,區域性變數用短名,外部變數用長名。2....