reference http://newscienceview.blogspot.com/2013/09/c-volatile.html
volatile是一個變數聲明限定詞。它告訴編譯器,它所修飾的變數的值可能會在任何時刻被意外的更新,即便與該變數相關的上下文沒有任何對其進行修改的語句。造成這種“意外更新”的原因相當複雜。
Syntax (語法)
要想給一個變數加上volatile限定,只需要在變數類型聲明附之前/後加入一個volatile關鍵字就可以了。下面的兩個實例是等效的,它們都是將foo聲明為一個“需要被即時更新”的int型變數。
volatile int foo;
int volatile foo;
同樣,聲明一個指向volatile型變數的pointer也是非常類似的。下面的兩個聲明都是將foo定義為一個指向volatile integer型變數的pointer。
volatile int * foo;
int volatile * foo;
一個Volatile型的pointer指向一個非volatile型變數的情況非常少見
int * volatile foo;
最後一種形式,針對你真的需要一個volatile型的指標指向一個volatile型的情形:
int volatile * volatile foo;
最後,如果你將volatile應用在struct或者是union上,那麼該struct/union內的所有內容就都帶有volatile屬性了。如果你並不想這樣(牽一髮而動全身),你可以僅僅在struct/union中的某一個成員上單獨使用該限定。