C語言之變數的作用域與修飾關鍵字

2021-09-22 08:26:15 字數 1798 閱讀 4222

注意:作用域和生命週期要特別注意區分概念。

全域性變數:定義在函式外。

區域性變數:定義在函式內。

塊變數:定義在if,for,while等語句塊中。

初始化區域性變數和全域性變數

當區域性變數被定義時,系統不會對其初始化,您必須自行對其初始化。定義全域性變數時,系統會自動對其初始化,如下所示:

資料型別

初始化預設值

int0

char

『\0』

float

0double

0pointer

null

auto:

用來定義申請記憶體、自動釋放記憶體的變數(區域性、塊變數,預設被auto修飾)。申請和釋放的都是訪問許可權,不是資料。

注意:auto只能用在函式內,即auto 只能修飾區域性變數。全域性變數和static變數不能被auto修飾。因為它們的記憶體段不同。

const:

是對變數提供一種保護機制,但它不一定是常量。

const變數一旦初始化後,就不能再顯式地修改它的值。但是可以通過指標來修改。

const修飾被初始化過的全域性變數才是真正的常量,一旦修改就出現段錯誤,因為編譯器把這種全域性變數的儲存位置劃分進了記憶體的**段。

#include

const

int num2;

//未初始化的全域性變數

const

int num3 =13;

//已初始化的全域性變數

intmain()

注意:const int func(void);const 修飾的是函式的返回值

static:

儲存類指示編譯器在程式的生命週期內保持區域性變數的存在,而不需要在每次它進入和離開作用域時進行建立和銷毀。

注意:static int func(void); static 修飾的是函式(由普通函式變為內部函式),只能在當前檔案內呼叫。

register:

計算機的儲存介質(從慢到快):硬碟 -> 固態硬碟 -> 記憶體 -> 快取 -> 暫存器

register關鍵字申請把變數的儲存位置更改為暫存器。僅僅是申請,因為暫存器數量有限或者硬體不同,不一定成功。

適用場景:如果要寫乙個死迴圈,其中有乙個變數要頻繁計算,那麼就應該修飾為register,比如計數器。可以大大提高運算效率。

volatile:

(不穩定的,易變的):修飾執行緒間共享的變數,或者硬體程式設計時使用。

如果乙個變數的值沒有顯式的修改,編譯器不會再次從記憶體中讀取它的數值,而是直接使用上次的讀取結果(優化過程)。

volatile的功能就是告訴告訴編譯器變數的值隨時可能發生變化,不要優化它的取值過程(每次用到變數時都去記憶體中獲取它的值)

int num =10;

num == num;

//永遠為真。

volatile

int num1 =20;

num1 == num1;

//不一定為真,多執行緒或者硬體改變時。

extern:

多檔案中共享全域性變數時使用。誰使用誰宣告。可以這麼理解,extern 是用來在另乙個檔案中宣告乙個全域性變數或函式。

定義的含義:建立變數名,分配儲存空間

宣告的含義:建立變數名

a.c中定義乙個全域性變數,b.c中如果想使用,共享乙個變數。

c 之變數作用域

作用域是程式的乙個區域,一般來說有三個地方可以定義變數 我們將在後續的章節中學習什麼是函式和引數。本章我們先來講解宣告是區域性變數和全域性變數。在函式或乙個 塊內部宣告的變數,稱為區域性變數。它們只能被函式內部或者 塊內部的語句使用。下面的例項使用了區域性變數 include iostream us...

C 之變數作用域

在函式或乙個 塊內部宣告的變數,稱為區域性變數。在函式引數的定義中宣告的變數,稱為形式引數。在所有函式外部宣告的變數,稱為全域性變數。整數常量可以是十進位制 八進位制或十六進製制的常量。字首指定基數 0x 或 0x 表示十六進製制,0 表示八進位制,不帶字首則預設表示十進位制。整數常量也可以帶乙個字...

C語言之變數與常量

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