本文和大家分享的主要是C語言中volatile與typedef相關內容,一起來看看吧,希望對大家有所幫助。
Volatile關鍵字
Volatile就是防優化。Volatile一般和硬件有關,指向硬件的內容可能我們需要不要讓編譯器去優化,每次都要讀取那里的內容。比如我們在實際操作中有一個鍵盤,我們查看一個按鍵是否被按下,就是通過讀取內存里面關于按鍵狀態的高低電平來識別。那么我們怎么來讀取這一個位里面的狀態(0或1)?我們能夠訪問到最小的內存地址就是一個字節,而一個字節里面有8個位。所以我們只能利用一個undsigned char*類型的指針來讀取一個字節的內容,再通過位運算來獲取到其中的某一位判斷它的狀態。這就是我們在硬件操作-軟件操作于硬件的思路。這一個字節的內容是不是常量,它是由于硬件的狀態來決定的,里面的內容可能被編譯器優化掉,便于我們讀寫操作。Volatile主要與char *p結合。
volatile ?char *p;
while( *p == 0x10 ) ?//我們可以假設它的狀態是值的改變,當按鍵按下的時候值就變成這樣,此時我們的循環體就是它執行的操作了。
xxxx;
Typedef關鍵字
Typedef是一個別名。在后期,我們需要指針可以指向所有的資源,有些資源類型的聲明和讀取是比較復雜的。也許我們看到指針的時候不能一眼就看出它的類型。比如下面這種指針使用方法:
int ?(*p[10])(int ,void (*p)(int));
C語言不斷的在描述內存屬性,這些內存屬性可以是函數,數組…..所以指針指向的類型是千奇百怪的。所以我們就采用Typedef把這些聲明別名化。
char *name_t ?: ? ? //name_t是一個指針,指向了一個char類型的內存
typedef char *name_t; ?// name_t是一個指針類型的名稱,指向了一個char類型的內存
name_t abc; ?// abc是一個指針,指向了一個char類型的內存
可以看到有了別名之后,我們可以簡化指針類型的聲明和讀取,這在我們后期學了函數之后,它的好處就體現出來了。