日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

局部靜態(tài)變量Static詳解

 戴維圖書館 2017-07-18
在局部變量前加上“static”關(guān)鍵字,就成了靜態(tài)局部變量。靜態(tài)局部變量存放在內(nèi)存的全局?jǐn)?shù)據(jù)區(qū)。函數(shù)結(jié)束時,靜態(tài)局部變量不會消失,每次該函數(shù)調(diào)用 時,也不會為其重新分配空間。它始終駐留在全局?jǐn)?shù)據(jù)區(qū),直到程序運行結(jié)束。靜態(tài)局部變量的初始化與全局變量類似.如果不為其顯式初始化,則C++自動為其 初始化為0。
靜態(tài)局部變量與全局變量共享全局?jǐn)?shù)據(jù)區(qū),但靜態(tài)局部變量只在定義它的函數(shù)中可見。靜態(tài)局部變量與局部變量在存儲位置上不同,使得其存在的時限也不同,導(dǎo)致對這兩者操作 的運行結(jié)果也不同。
例如,下面的程序定義了全局變量、靜態(tài)局部變量和局部變量:
 #include <iostream.h>
void func();
int n = 1; //全局變量
void main()
{
static int a; // 靜態(tài)局部變量
int b = -10; // 局部變量
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
b += 4;
func();
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
n += 10;
func();
}
void func()
{
static int a = 2; // 靜態(tài)局部變量
int b = 5; // 局部變量
a += 2;
n += 12;
b += 5;
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
}

運行結(jié)果為:
  a:0 b:-10 n:l
      a:4 b:10 n:13
      a:0 b:-6 n:13
      a:6 b:10 n:35

程序中主函數(shù)main()兩次調(diào)用了func()函數(shù),從運行結(jié)果可以看出,程序控制每次進入func()函數(shù)時,局部變量b都被初始化。而靜態(tài)局部 變量a僅在第一次調(diào)用時被初始化,第二次進入該函數(shù)時,不再進行初始化,這時它的值是第一次調(diào)用后的結(jié)果值4。 main()函數(shù)中的變量a和b與func()函數(shù)中的變量a和b空間位置是不一樣的,所以相應(yīng)的值也不一樣。關(guān)于變量作用域和可見性的進一步討論見第6 章。
靜態(tài)局部變量的用途有許多:可以使用它確定某函數(shù)是否被調(diào)用過。使用它保留多次調(diào)用的值。

對靜態(tài)局部變量的說明: 
(1) 靜態(tài)局部變量在靜態(tài)存儲區(qū)內(nèi)分配存儲單元。在程序整個運行期間都不釋放。而自動變量(即動態(tài)局部變量)屬于動態(tài)存儲類別,存儲在動態(tài)存儲區(qū)空間(而不是靜態(tài)存儲區(qū)空間),函數(shù)調(diào)用結(jié)束后即釋放。 
(2) 為靜態(tài)局部變量賦初值是在編譯時進行值的,即只賦初值一次,在程序運行時它已有初值。以后每次調(diào)用函數(shù)時不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時的 值。而為自動變量賦初值,不是在編譯時進行的,而是在函數(shù)調(diào)用時進行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語句。 

(3) 如果在定義局部變量時不賦初值的話,對靜態(tài)局部變量來說,編譯時自動賦初值0(對數(shù)值型變量)或空字符(對字符型變量)。而對自動變量來說,如果不賦初 值,則它的值是一個不確定的值。這是由于每次函數(shù)調(diào)用結(jié)束后存儲單元已釋放,下次調(diào)用時又重新另分配存儲單元,而所分配的單元中的值是不確定的。 
(4) 雖然靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束后仍然存在,但其他函數(shù)是不能引用它的,也就是說,在其他函數(shù)中它是“不可見”的。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多