關鍵字的作用以及注意事項

2021-07-15 12:56:02 字數 1620 閱讀 9201

如果乙個變數被register修飾,就意味著該變數會作為乙個暫存器變數,讓該變數的訪問速度達到最快。register的作用:請求編譯器盡可能(因為cpu內部暫存器有限)地將變數存在cpu內部暫存器中,從而省去了cpu從記憶體抓取資料的時間,提高了執行效率。如果乙個變數頻繁地被訪問,可以用register修飾這個變數。

使用register有以下注意事項:

1.register只能修飾區域性變數,不能修飾全域性變數。全域性變數有可能被多個程序訪問,只有當前程序知道全域性變數的位置。

2.不能對暫存器變數使用取位址符「&」,因為該變數沒有記憶體位址,而「&」獲取的是記憶體位址。

3.register修飾的變數一定是cpu所能接受的資料型別。

作用:static即可以修飾變數,也可以修飾函式。修飾的變數包括全域性變數和區域性變數。static在修飾區域性變數時,延長了區域性變數的生命週期,直至程式執行結束後釋放。static修飾全域性變數時,只能在其所在的檔案可見,其他檔案不可見。static修飾的變數存放在資料段的靜態資料區(data區)

,如果沒有初始化,系統會預設舒適化為0。static修飾函式的作用與修飾全域性變數大同小異,static修飾的函式只能在本檔案呼叫,其他檔案不可呼叫。

extern是乙個外部宣告,其修飾的變數以及函式是在其他檔案中定義的,在這裡宣告使用它,這樣多個原檔案共享變數和函式。

作用:const修飾乙個變數,該變數是唯讀變數,不能通過變數名去修改對應空間的值。const修飾函式形參時,可以避免在函式的實現過程中修改函式的值,便於除錯。

const離誰近,誰就不能修改;使用時,要對變數初始化。例:

const int a = 10;

int const a = 10;

const int *p;

const int a[10] = ;

上述例子把資料型別去掉,然後看const修飾誰,發現分別修飾a,a,*p,a[10],說明這些變數的值不變。

作用:1.給資料型別重起名字,提高**的移植性。

2.方便在程式設計中定義變數,提高編寫效率。

3.解釋某些變數的意思,起注釋作用。

1.執行時間不同:

關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能;#define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何語法檢查。

2.功能不一樣:

typedef用來定義型別的別名,

定義與平台無關的資料型別,與struct的結合使用等;

#define

不只是可以為型別取別名,還可以定義常量、變數、編譯開關等。

3.作用域不一樣:

#define

沒有作用域的限制,只要是之前預定義過的巨集,在以後的程式中都可以使用。

而typedef

有自己的作用域。

volatile

是被設計用來修飾被不同執行緒訪問和修改的變數

。如果不加入volatile,基本上會導致這樣的結果:要麼無法編寫多執行緒程式

,要麼編譯器

失去大量優化的機會。

volatile

的作用是: 作為指令關鍵字,

確保本條指令不會因編譯器

的優化而省略,且要求每次直接讀值。簡單地說就是防止編譯器對**進行優化.

static關鍵字的特點以及注意事項

當乙個類中的所有方法都是靜態的,它就會私有它的構造方法。例如 math類 使用場景 如果某個成員變數是被所有物件共享的,那麼它就應該定義為靜態的 其實它本身也可以通過物件名呼叫 推薦使用類名呼叫 原因 1.靜態是隨著類的載入而載入,this是隨著物件的建立而存在。2.靜態比物件先存在 靜態方法 成員...

static關鍵字注意事項

1 靜態方法中是沒有this關鍵字的,因此無法在靜態方法中引用非靜態變數。非靜態方法中可以直接訪問成員變數是因為隱含呼叫了this 非靜態方法中的 system.out.println num 等價於system.out.println this.num 因為靜態變數是隨著類的載入而載入的,this...

register關鍵字的注意事項!!

1.用register修飾的變數只能是區域性變數,不能是全域性變數。因為全域性變數的生命週期是從執行程式開始,一直到程式結束才會終止,而register變數可能會存放在cpu的暫存器中,如果在程式的整個生命週期內都占用著暫存器的話,這是個相當不好的舉措,cpu的暫存器資源有限,因此不可能讓乙個變數一...