您好,登錄后才能下訂單哦!
藍鷗iOS培訓講師推薦:在技術的領域里沒有懶這么一說,沒有學不會這么一說,只要你自己努力就沒什么太大問題。
變量除了數據類型以外,還有3種屬性:
1、存儲類別 C++允許使用auto,static,register和extern 4種存儲類別
2、作用域 指程序中可以引用該變量的區域
3、存儲期 指變量在內存的存儲期限
上面這介紹的這些3種屬性是有關系的,程序設計者只能聲明變量的存儲類別,通過存儲類別可以確定變量的作用域和存儲期
但是大家一定要注意存儲類別的用法auto, static和register 3種存儲類別只能用于變量的定義語句中,如:
auto char c; //字符型自動變量,在函數內定義
static int a;//靜態局部整型變量或靜態外部整型變量
register int d; //整型寄存器變量,在函數內定義
extern int b;//聲明一個已定義的外部整型變量
重點說明: extern只能用來聲明已定義的外部變量,而不能用于變量定義,只要看到extern,就能夠判斷變量聲明,而不是定義變量語句。
下面是不同角度的分析:
1、從作用域角度分,有局部變量和全局變量,它們采用的存儲類別如下:
1)局部變量
自動變量,即動態局部變量(離開函數,值就消失)
靜態局部變量(離開函數,值仍保留)
寄存器變量(離開函數,值就消失)
形式參數(可以定義為自動變量或寄存器變量)
2)全局變量
靜態外部變量(只限本文件引用)
外部變量(即非靜態的外部變量,允許其他文件引用)
2、從變量存儲期(存在的時間)來區分,有動態存儲和靜態存儲兩種類型,靜態存儲是程序整個運行時間都存在,而動態存儲則是在調用函數時臨時分配單元。
1)動態存儲
自動變量(本函數內有效)
寄存器變量(本函數內有效)
形式參數
2)靜態存儲
靜態局部變量(函數內有效)
靜態外部變量(本文件內有效)
外部變量(其他文件可引用)
3、從變量值存放的位置。可分為
1)內存中靜態存儲區
靜態局部變量
靜態外部變量(函數外部靜態變量)
外部變量(可為其他文件引用)
2)內存中動態存儲區: 自動變量和形式參數
3)CPU 中的寄存器: 寄存器變量
4、關于作用域和存儲期的概念,從前面敘述可以知道,對一個變量的性質可以從兩個方面分析,一是從變量的作用域,一是從變量值存在時間的長短,即存儲期,前者是從空間的角度,后者是從時間的角度,二者有關系,但是有不同的意義,如下圖:
作用域的示意圖
存儲期的示意圖
如果一個變量在某個文件或函數范圍內是有效的,那么這個文件或函數稱為該變量的作用域,在該作用域內能夠引用該變量的,所以又稱變量在此作用域內“可見”,這種性質又稱為變量的可見性,在“作用域的示意圖”中變量a、b在函數f1中能看到。
如果一個變量值在某一時刻是存在的,那么就認為這一時刻屬于該變量的存儲期,或稱該變量在此時刻“存在”
可以看到自動變量和寄存器變量在函數內的可見性和存在性是一致的,在函數外的可見性和存在性也是一致的,靜態局部變量在函數外的可見性和存在性不一致,靜態外部變量和外部變量的可見性和存在性是一致的。
5、static聲明使變量采用靜態存儲方式,不過它對全局變量和局部變量有不同的作用,對局部變量而言,staic使動態存儲方式改為靜態存儲方式,而對于全局變量而言,它又使變量局部化(局部于本文件),不過仍是靜態存儲方式,從作用域角度而言,只要是有static聲明的,那么它的作用域都是局限的,可能只局限于本函數內(靜態局部變量),也有可能局限于本文件內(靜態外部變量)
本節課和大家說的有點多,不過理解起來應該不是很復雜,大家可以試著先理解一下,整理出來一個思路,如果有不懂的地方可隨時溝通!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。