變數的儲存型別有兩種:動態和靜態,其中又有四種基本型別:auto,static,register,extern
auto便是經常在函式中碰到的那些區域性變數,關鍵字auto可省略,定義register變數就是為了提高對資料的訪問速度,只有區域性自動變數或形參可以這麼定義,下面就static和extern做乙個比較:
1.static是對變數或函式的定義,而extern僅是對變數的宣告,也就是在具體使用是需先給出定義;
2.static定義的變數是永遠是在全域性資料區分配記憶體,而extern由於是對變數的宣告,並不分配記憶體空間;
3.static定義的全域性變數沒有初始化,預設為0 or 空字元;
4.static的作用域對於靜態全域性變數或函式是本.c檔案內從定義開始到該檔案結束,對於靜態區域性變數是函式語句塊結束,而extern宣告的變數可以跨函式,跨檔案使用;
5.static定義的靜態函式只能在本.c檔案中使用,extern宣告的函式可以跨模組使用。
說一下需要使用static或extern的地方(個人在程式設計中遇到的):
2.靜態變數是在函式呼叫之前賦值的(自動變數是在函式呼叫時賦值,so,每呼叫一次就要重新賦一次值,而靜態變數是在編譯時進行),若該變數只被引用而不改變值得話,可以考慮使用靜態變數;
3.在工程中,若需要使用跨檔案的全域性變數,可以考慮宣告extern變數,個人覺得這是extern唯一值得也是實際中可以使用的地方(ps:extern跨檔案的原理,編譯時遇到extern,先在本檔案中找外部變數的定義,如果找到,就在本檔案中擴充套件作用域,如果找不到,就從其他檔案中找外部變數的定義,如果在其它檔案中找到了,就將作用域擴充套件到本檔案,否則,error)
static定義的變數佔記憶體,會使程式更加凌亂,extern也可能會改變乙個全域性變數的值,影響另一檔案中的執行結果,所以,使用時請慎重。
可以看出extern的使用方法與技巧。
變數的儲存型別
曾巨集安,華清遠見嵌入式學院 講師。我們在程式中會經常定義一些變數來儲存和處理資料。從本質上看,變數代表了一段可操作的記憶體,也可以認為變數是記憶體的符號化表示。當程式中需要使用記憶體時,可以定義某種型別的變數。此時編譯器根據變數的資料型別分配一定大小的記憶體空間。程式就可以通過變數名來訪問對應的記...
變數的儲存型別
儲存型別是從變數的存在時間 即生存期 來劃分變數。變數的儲存型別可分為靜態儲存方式和動態儲存方式。對於動態儲存變數,當程式執行到該變數處時才為其分配儲存空間,當程式執行到該變數所在作用域的結束處時自動收回為其分配的儲存空間,因此它的生存期為所在作用域。在程式開始就執行就為其分配儲存空間,直到程式結束...
變數的儲存型別
變數的儲存型別有4種,分別是static external register auto,對於每一種儲存型別,他們都有相應的使用方式和特點,下面就分別對這四種儲存型別介紹一下 1.static靜態型 可以修飾區域性變數 全域性變數 函式 a.存放在靜態區,靜態區的資料未初始化時,由系統給該變數賦初值,...