變數的屬性:
儲存位置:變數使用的是那一段記憶體
作用域:變數的使用範圍
生命週期:建立時間~銷毀時間
變數的分類:
全域性變數:定義在函式外。
儲存位置: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...