register
作用:請求編譯器盡可能地將變數存在cpu記憶體暫存器中。而不是通過記憶體定址訪問的 方法,
好處:省去了cpu處理訪問記憶體資料的時間。
注意事項:
1,register修飾變數的型別必須是cpu能夠接受,register變數
必須是乙個單個的值,並
且長度應該小於或者等於整型的長度,
2,register變數可能不是在記憶體中儲存,所以不能用&來取位址,因為&用來獲取的是內
存的位址,
因為暫存器的數目有限,而且智慧型接受特定型別的資料,真正起作用的register修飾
符都是依賴執行程式的機器,大部分多餘的register修飾符都會在程式設計的時候被自動忽
略,儘管這樣是合法的,但是這個修飾符僅僅是暗示,而不是命令。
static
修飾變數和函式,延遲其生命週期,在程式結束的釋放
變數分為區域性變數和全域性變數,
修飾區域性變數:儲存在資料區的靜態資料區,
只被初始化一次,之後每次呼叫函 數時,該變數值為上次函式退出時的值。即,改變量的生存擴充套件 到整個程式執行時間段內。
例程
如果用static修飾區域性變數,那麼函式的釋放在程式結束時,此前就保留上次函式執行的數值。
注意事項
1, 寫程式的時候盡量少用全域性變數,因為全域性變數很危險,能夠被所有檔案訪問
2, 若全域性變數只想在本檔案內呼叫,則可以用static呼叫,此時static起到了保護的
作用extern
外部宣告不是本原始檔的變數,就是告訴編譯器,這個識別符號雖然沒有在本檔案中定義,但是在其他檔案中被定義為全域性變數,你可以放行。
如果在a.c函式中呼叫b.c,則需要在a.c中宣告b.c
extern char b()
extern int count;
void print()
注意點:宣告函式或者變數可以有n次,但是它們只能定義一次,如果某個全域性變數在多個檔案中被定義,那麼會編譯器會報錯,因為出現了重定義
const
(1)修飾唯讀變數,該變數對應的空間值可以變化,但是不可以通過修飾的變數名 來修改
const int *p = #
p++;
(*p)++;(不可變)
num++;
int const *p = #
p++;
(*p)++;(不可變)
num++;
int * const p = #
p++; (不可變)
(*p)++;
num ++;
總結:const離哪個近,就不可以通過它的名字來求改變量的值;
(2)便於編譯器對資料型別的檢查,如,定義乙個const int i,編譯器知道i是乙個不可以修改的變數
(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。 同巨集定義一樣,可以做到不變則已,一變都變!
(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。
在函式前加const作用:函式實現者的好處,在編寫函式時,不可修改該函式的形參
char *strcpy( char *dest,const char *src)
(6) 可以節省空間,避免不必要的記憶體分配。 例如
#define pi 3.14159 //常量
const doulbe pi=3.14159; //此時並未將pi放入rom中 ......
double i=pi; //此時為pi分配記憶體,以後不再分配!
double i=pi; //編譯期間進行巨集替換,分配記憶體
double j=pi; //沒有記憶體分配
double j=pi; //再進行巨集替換,又一次分配記憶體!
const定義常量從彙編的角度來看,只是給出了對應的記憶體位址
,而不是象#define一樣給出的是立即數,所以,const定義的常量
在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中
有若干個拷貝。
使用條件:一般用於修飾函式的形參:避免在函式實現中,修改函式實參的值
typedef
為一種資料型別定義乙個新名字
1, 提高**的移植性。
2, 方便在程式設計過程中定義變數
3, 解釋某些變數的意思,(起到注釋的作用)
c語言中關鍵字
static 修飾區域性變數,改變變數的生命週期和儲存空間,但是不改變作用域,仍然是乙個區域性變數,作用域僅限於該 修飾全域性變數,改變變數的作用域只能在當前檔案訪問,不能在其他檔案訪問 修飾函式,改變函式的作用域,函式只能在本檔案中被呼叫,不能在其他檔案被呼叫。extern 可以修飾變數和函式,表...
C語言中的關鍵字!
今天總結一下c中的關鍵字 資料型別關鍵字 12個 1 char 宣告字元型變數或函式 2 double 宣告雙精度變數或函式 3 enum 宣告列舉型別 4 float 宣告浮點型變數或函式 5 int 宣告整型變數或函式 6 long 宣告長整型變數或函式 7 short 宣告短整型變數或函式 8...
c語言中的關鍵字
auto,static,register分析 auto 即c語言中區域性變數的預設屬性 auto即c 語言中區域性變數的預設屬性 static 修飾的區域性變數儲存在程式靜態區 static 修飾的全域性變數作用域只是宣告的檔案中 static 修飾的函式作用域只是宣告的檔案中 register關鍵...