變數與修飾變數

2021-09-23 14:31:57 字數 1249 閱讀 1217

變數的屬性:

儲存位置:變數使用的是那一段記憶體

作用域:變數的使用範圍

生命週期:建立時間~銷毀時間

變數的分類:

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

儲存位置:bss未初始化、被初始化了儲存在data。

作用域:整個程式,比如在a.c定義了全域性變數,在b.c中也可以使用

生命週期:main函式執行前就被定義出,程式執行結束後再釋放

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

儲存位置:棧

作用域:所在函式內

生命週期:從定義語句開始~函式執行結束,函式沒呼叫一次就進行一遍定義和釋放。

塊變數:定義在if、for、while等語句內。

儲存位置:棧

作用域:所在語句塊的大括號內

生命週期:從定義語句開始~函式執行結束。

static 限制作用域(全域性變數函式),改變儲存位置,延長生命週期(區域性、塊變數)。

修飾變數:

全域性變數:限制全域性變數的作用域,只能在它所在的.c內使用

塊、區域性變數:改變儲存位置,由棧改為bss或data,但作用域沒有變,並且延長生命週期。

修飾函式:

const int func(void);const 就是的函式的返回值。

static int func(void); static 修飾的是函式。

由普通函式(外部函式)變成內部函式,只能在.c檔案內使用。

register (暫存器)

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

申請把變數儲存位置更改為暫存器。因為暫存器有限不一定成功。

暫存器變數不能取位址,&變數名。

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

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

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

int num = 10 ;

num == num //永遠為真

volatile int num = 10 ;

num == num //可能為假

extern 宣告變數,多檔案中共享全域性變數時使用,誰宣告誰使用。

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

宣告:建立變數名。

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

final修飾變數 與Stastic修飾的變數

一 final修飾變數 final可以修飾成員變數,也可以修飾區域性變數 形參。final變數一旦獲得初始值之後,final的變數就不能被重新賦值。成員變數是隨類初始化或物件初始化而初始化的,當執行靜態初始化塊時候可以對類屬性進行賦初始值,當執行普通初始化塊或者構造器的時候可以對例項屬性賦初始值。因...

static修飾變數

如果乙個變數變static修飾,會產生什麼樣的結果?1 static修飾區域性變數 例如 include void test int main return 0 執行結果為 當a被static修飾之後 include void test int main return 0 執行結果為 即static...

mutable 修飾的變數

mutable 可以用來指出,即使結構或者類變數為const,其某個成員也可以被修改 在c 的類中,如果乙個函式被const 修飾,那麼它將無法修改其成員變數的,但是如果這個成員變數是被mutable修飾的話,則可以修改。例如 struct data char name 30 mutable int...