1. 程式人生 > >static、const及volatile

static、const及volatile

很多次了,但是還是有點不好記憶,還是寫點筆記 static: 1)如果static修飾一個函式體內的變數則在呼叫過程中其值不會被改變 2)如果static修飾一個變數(在模組中但不在函式體內)或函式,則這個變數或函式只在該模組中能被呼叫,不能被其他模組的函式呼叫

const: 簡單來說const關鍵字的作業是“只讀” 1)被const修飾的變數的值不可改變 const int a; int const a; 都表示a的值不能被改變 2)const修飾指標有三種情況 a、const int *a; 此時a這個指標指向的地址中的值不能被改變, 此處注意:const int *a與int const *a是等價的 b、int* const a; 此時指標a的指標名不能被改變但內容可以被改變 c、const int const *a; 此時指標以及指標所指向的內容都不會被改變 volatile: 使用volatile修飾的變數意味著這個變數可能會被意想不到的改變,也就是說此時被備份放在暫存器中的值不一定是準確的,所以每當優化器用到這個值時都會小心的重新讀取。因此被volatile修飾的變數是不會被編譯器優化的 建議使用volatile的場所: 1)並行裝置的硬體暫存器 2)一箇中斷服務子程式會訪問到的非自動變數(全域性變數) 3)多執行緒任務中被幾個任務共享的變數