1.ststic:
(1).修飾函式,只能在宣告他的原始檔中使用;在大型專案中,防止不同檔案中函式重名時使用。
(2).修飾儲存型別使之成為靜態儲存型別,(修飾後的變數儲存在資料段,初值為0)分為兩種:
b.修飾區域性變數:改變生命週期,函式呼叫結束不再釋放,整個程式執行結束釋放(區域性變數儲存在棧空間,static修飾後儲存在資料段的靜態資料區);何時使用:程式應該盡量少得使用全域性變數(安全性),需要時用static修飾區域性變數替代;另外在統計時也會使用到;
2.const
(1).修飾唯讀變數,一般在傳參時使用,修飾函式形參,保證變數在函式中不被修改;
(2),const 修飾的是變數名,不是記憶體空間。故不可通過變數名修改變數的值,但是可以通過位址修改(所以const修飾的變數的說法錯誤);
(3).例:const int num=5;
a.num++;編譯出錯;
b. int *p=# mun++; //此時num值被修改為6;
(4).const為就近原則:
const int *p不變
*p不變,即內容不變,但是p的指向可以變
有const int *p=# 則p++;(對) (*p)++;(錯) num++;(錯)
int const *p
*p不變
int * const p
p不變,指向不變,但內容(*p)可變
const int *const p
p和*p都不變,內容和指向都不變
3.typedef:
(1).給資料型別重新命名:
(2).提高程式可移植性,可讀性,和開發效率
a.切換平台時,減少不同平台有符號數和無符號數切換帶來的問題;減少**修改量,只需修改typedef語句;
b.隱式表明引數型別:typedef unsigned int size_t; int func(size_t a,size_t b)
4.extern
(1).作外部宣告;(不分配記憶體空間,extern不是語法,是一種規範),優化編譯速度
a.函式內部宣告:
int func()
....
int num; //num為全域性變數
//此種情況一般將全域性變數放在程式頂部,避免宣告
b.在其他檔案中宣告
(2).宣告函式
5.register
(1).修飾變數,將變數盡可能地儲存在cpu內部暫存器中;(盡可能:暫存器為稀缺資源,不夠使用)
(2).省去cpu從記憶體中獲取資料的時間,提高程式執行效率;
(3).何時使用:迴圈變數或頻繁被訪問的變數;
6.volatile(與硬體相關)
(1).防止編譯器內部將變數自動優化到暫存器中;例:
int i=100;
while(i>0)
//條件永遠成立,很多很多次後,編譯器預設該值不變,編譯自動優化,將值移入暫存器
//帶來後果:若之後i的值修改,編譯器中值不變,編譯出錯
extern防止這種優化
(2).一般在裸機時候使用
面試之關鍵字extern C
extern c 的作用及原因?答 1.作用是在c 語言裡面可以正確的呼叫c語言函式 原因是因為c 編譯時為了能支援函式過載以及多型的問題,會將函式名和引數聯合起來生成乙個中間的新函式名,鏈結時找的都是新的函式名,而對於c語言來說,不會產生新的函式名,所以在c 中用c語言的函式時,如果沒有特殊宣告,...
面試 static關鍵字
static可以修飾變數和函式 修飾函式 改變該函式的連線屬性,表明該函式只能在當前檔案中使用 修飾變數 全域性變數 表明該變數只能在當前檔案中使用 函式體中的區域性變數 1.延長該變數的生命週期 和成員函式的生命週期一樣 2.類似該變數具有記憶的功能 3.存放位置不同於函式體中的區域性變數 因為c...
C語言總結之 關鍵字
我記得我開始學習c語言的時候,那時候還在讀高中,我們老師就把c語言的關鍵字,全部寫在黑板上,老師說我們下面的兩節課的內容就是 把它給記下來 你還記得標準c有多少個關鍵字嗎?第一 關鍵字描述 c99 關鍵字為32個 如果你還有不認識的,還應該好好複習複習了。關鍵字 意義 auto 宣告自動變數,預設時...