關鍵字包括register,static,const,typedef,extern
含義:是暫存器變數
作用:請求編譯器盡可能的將這個變數值儲存在cpu內部的暫存器內,以節省cpu從記憶體中抓取資料的時間,提高**的執行效率
適用變數:頻繁被訪問的變數,如迴圈變數
注意事項:1、只能修飾區域性變數,而不能修飾全域性變數或函式 2、不能通過取位址來得到變數的位址 3、修飾的變數一定要是cpu所能接受的資料型別
注釋:
1、為何要盡可能的儲存在暫存器內:因為cpu內部的暫存器有限,是稀缺資源
2、為何不能修飾全域性變數:因為全域性變數是會被多執行緒或多工訪問的,而被register訪問的變數只有本程序知道變數儲存在哪兒
含義:靜態變數
修飾物件:可以修飾全域性變數,也可以修飾區域性變數,還可以修飾函式
作用
修飾區域性變數的作用:延長他的生命週期,使得原本函式結束就要被釋放的變數能夠在程式結束之後再釋放。
修飾全域性變數的作用:使得該變數只能在本檔案中被使用,並將全域性變數儲存在靜態資料區,預設初始化為0
修飾函式的作用:使得該函式只能在本檔案中被訪問
何時修飾注釋:
1、如果另一函式a.c要呼叫本函式b.c的全域性變數,則可以在a.c裡加上
因為extern的作用是外部宣告。
2、被static修飾的函式,如果定義在乙個未被修飾的函式後面。則先要在這個未被修飾的函式前面加上被修飾函式的宣告。
3、為何想讓變數在程式結束後釋放,而不用全域性變數呢:因為全域性變數比較危險,對所有人都可見,而靜態區域性變數更安全
含義:是乙個唯讀變數
注釋:const修飾的是乙個變數名,所以變數名對應的空間可變而不能通過變數名來修改這個空間
作用:使其修飾的變數名不能修改此空間,而其空間通過其他方式可以改變
注釋:const離誰近,誰不能自加。
int num = 5;
const int
*p = #
p++;
(*p)++;
num++;
此時const修飾的是*p,所以(*p)++
不可以實現。
因此,const int *p 和int const *p
不可以實現(*p)++
而int * const p不可以實現p++
修飾物件:變數及形參
注釋:防止實現函式過程中,會修改實參的值
注意事項:一定要將變數初始化,不然以後無法賦值
含義:給資料型別重新命名
作用:1、提高**移植性 2、將複雜名變為簡單名,方便編寫程式 3、同時也能起注釋作用
含義:修飾被不同執行緒訪問和修改的變數。
注釋:如果不加入volatile,基本上會導致這樣的結果:要麼無法編寫多執行緒程式,要麼編譯器失去大量優化的機會。
作用:確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
簡單地說就是防止編譯器對**進行優化.比如如下程式:
xbyte[2]=0x55;
xbyte[2]=0x56;
xbyte[2]=0x57;
xbyte[2]=0x58;
對外部硬體而言,上述四條語句分別表示不同的操作,會產生四種不同的動作,但是編譯器卻會對上述四條語句進行優化,認為只有xbyte[2]=0x58(即忽略前三條語句,只產生一條機器**)。如果鍵入volatile,則編譯器會逐一的進行編譯並產生相應的機器**(產生四條**). C語言關鍵字
c語言關鍵字 在檔案範圍的教訓和關鍵字,你知道靜態變數保持他們的價值觀,甚至不在他們超出範圍的破壞。比如說呢。int generateid int main this program prints 01 2 請注意,s nid一直保持它的價值的跨多個函式呼叫。static關鍵字有另一種意思當應用到全...
C語言關鍵字
關鍵字就是已被c語言本身使用,不能作其它用途使用的字。例如關鍵字不能用作變數名 函式名等 由ansi標準定義的c語言關鍵字共32個 auto double int struct break else long switch case enum register typedef char extern...
c語言關鍵字
c 語言標準定義的32 個關鍵字 1 auto 宣告自動變數,預設時編譯器一般預設為auto int 宣告整型變數 double 宣告雙精度變數 雙精度浮點型 long 宣告長整型變數 char 宣告字元型變數 float 宣告浮點型變數 單精度浮點型 6.1 float的有效位通常有 位,指的是小...