提高篇 第12節 變數的儲存類別

2021-07-09 08:33:54 字數 1304 閱讀 5481

1.四種變數儲存類別

①自動的----auto 例:

int f(int a)

auto是區域性變數預設的儲存類別

例:

①auto int b,c=3;

②int b,c=3;

這倆種的寫法效果其實是一樣的

auto型的區域性變數(即自動型)是儲存在動態儲存區的,它在定義的時候自動分配儲存空間,當作用域結束時自動釋放記憶體空間

②暫存器的---register

用register宣告乙個暫存器變數 例:

int fac(int n)

這裡宣告的暫存器變數i和f都是放在暫存器中,由於暫存器在cpu中,是計算機儲存體系中離運算器最近,訪問最直接,所以速度最快

雖然暫存器變數速度最快,但是由於暫存器比較小,空間有限,所以我們使用的時候應該慎重,好鋼要用到刀刃上

這裡暫存器變數有乙個很可笑的問題,我們在程式中定義暫存器變數對於編譯系統其實只是乙個建議,而非強制。

我們優化編譯系統能夠識別使用頻繁的變數,自動的將這些變數放在暫存器中

③外部的---extern

extern是用來宣告外部變數的,大多數情況下就是針對全域性變數,它宣告的變數是儲存在靜態資料區 例:

#include int max(int,int);

int main()

int a=15,b=-7;//定義全域性變數a,b 因為我們定義的a,b的位置靠後,所以main函式呼叫的時候我們用extern先宣告它們是全域性變數

int max(int x,int y)

④靜態的---static

我們現在用static來宣告乙個靜態的區域性變數 例:

int f(int a)

顧名思義,靜態區域性變數就是儲存在靜態儲存區的變數,當該靜態區域性變數使用完後它是不會被釋放的,會一直保留到程式執行結束

靜態區域性變數的性質:

1.區域性特性:作用域僅限於本函式

例:

#include int f(int a)

int main()

執行結果是7 8 9,為什麼會出現這種情況呢?這是因為我們定義了乙個靜態區域性變數c,每次呼叫f函式,c的值在呼叫完都不會被釋放,等待下次呼叫

通過debug我們其實可以看到  第二次呼叫函式f的時候 我們c的值就是第一次呼叫結束時候c的值4,第二次呼叫程式跳過了再次定義靜態c變數這一步,直接賦值4

變數的儲存類別

從變數的作用域來分,變數可以分為全域性變數和區域性變數。在乙個函式內部定義的變數是區域性變數,它只是在本函式範圍內有效,在此函式外不能使用這些變數的。全域性變數可以供所有函式共用,它的有效範圍為從定義變數的位置開始到本原始檔結束。全域性變數的優點是 可以減少函式實參和形參的個數,從而減少記憶體空間以...

變數的儲存類別

儲存類別 是指資料在記憶體中的儲存方式 1 供使用者使用的儲存空間 程式區靜態儲存區 編譯時候分配空間,程式結束釋放空間。存放全域性變數 動態儲存區 定義時動態分配空間,對應函式完成時就釋放空間,再呼叫時又重新動態分配空間。存放auto型別區域性變數 2 儲存型別 auto,static,regis...

變數的儲存類別

普通區域性變數 自動變數 在乙個函式內定義,只在函式範圍內有效。在復合語句中定義,只在符合語句中有效。隨著函式呼叫的結束或復合語句的結束而消亡。如果沒有賦初值,則內容為隨機值。2.靜態區域性變數static 作用域 定義的函式內有效。生命週期 在定義的整個週期,靜態區域性變數始終從在著,即使退出函式...