1. 解釋
前面是無符號整型unsigned int的指針, 后面加一個地址,就是無符號整型的地址,前面又一個星號就是這個地址的值。
2.volatile
同步
因為同一個東西可能在不同的存儲介質中有多個副本,有些情況下會使得這些副本中的值不同,這是不允許的,所以干脆用volatile,讓它只有一個,沒有其他的副本,這樣就不會發生不同步的問題。
如下所示:
volatile的意思是告訴編譯器,在編程源代碼時,對這個變量不要使用優化。
在一般的程序設計中,如:
int *a; int b;
b = (*a) * (*a);
這種情況。
通常編譯器為了減少存儲器的讀寫時間,會把代碼優化為:
int *a; int b; int c;
c = *a;
b = c * c;
如果把int a改為volatile int a編譯器就不會自動把它優化掉了。在整個運算過程中,對變量a的值又讀取了一次。防止因變量a的值在這一期間發生了改變,而導致程序結果的錯誤。
防止編譯器優化去掉某些語句
當地址是io端口的時候,讀寫這個地址是不能對它進行緩存的,這是相對於某些嵌入式中有cache才有這個。比如寫這個io端口的時候,如果沒有這個volatile,很可能由於編譯器的優化,會先把值先寫到一個緩沖區,到一定時候再寫到io端口,這樣就不能使數據及時的寫到io端口,有了volatile說明以后,就不會再經過cache,write buffer這種,而是直接寫到io端口,從而避免了讀寫io端口的延時。