一 extern定義全域性變數的用法:
定義方式:
(1)在原始檔中定義:變數型別 變數名 = 變數初始化值;
宣告方式一:
(1)在定義該變數的類的標頭檔案中宣告該變數:extern 變數型別 變數名;
(2)在需要使用該變數的其他類中新增該類的標頭檔案。
宣告方式二:
(1)在需要使用該變數的其他類的標頭檔案中新增該類的標頭檔案,並新增該變數的宣告:extern 變數型別 變數名;
//class a 原始檔
#include
int m_value = 0;
int main()
m_value = 3;
return getvalue();
int getvalue()
return m_value;
//calss a標頭檔案
public:
int main();
int getvalue();
//calss b原始檔
include
int main()
m_value = 2;
return getvalue();
int getvalue()
return m_value;
//class b標頭檔案
include
extern int m_value;
int main();
int getvalue();
二 static定義靜態全域性變數的用法:
static 變數型別 變數名;
注意:靜態全域性變數在宣告它的整個檔案都是可見的,而在檔案之外是不可見的。
//calss a原始檔
include
static int m_value;
int main()
//class b標頭檔案
include
extern int m_value;
執行class b會報錯,因為m_value是靜態全域性變數,只可以應用於class a,如果把class a中變數的定義改為:int m_value; 就不會報錯了。
static定義靜態區域性變數:
在區域性變數前加上static,就是區域性靜態變數。
靜態區域性變數有以下特點:
(1)該變數在全域性資料區分配記憶體;
(2)靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進行初始化;
(3)靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;
(4)它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;
例如://calss a
int main();
int a = getvalue();
int b = getvalue();
int c = getvalue();
return 0;
int getvalue()
static int m_value = 0;
m_value++;
return m_value;
最後值:
a = 1;
b = 2;
c = 3;
有此處可以看出,靜態區域性變數的值在初次執行到該變數的宣告時初始化,此後不會再重新初始化。每次呼叫getvalue函式m_value的值都會在上次呼叫該函式的值的基礎上累加。
三 全域性變數和靜態全域性變數的區別:
1)全域性變數是不顯式用static修飾的全域性變數,全域性變數預設是有外部鏈結性的,作用域是整個工程,在乙個檔案內定義的全域性變數,在另乙個檔案中,通過extern 全域性變數名的宣告,就可以使用全域性變數。
2)全域性靜態變數是顯式用static修飾的全域性變數,作用域是宣告此變數所在的檔案,其他的檔案即使用extern宣告也不能使用。
static和extern的區別
static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...
static和extern的區別
static 一 在c中,static主要定義全域性靜態變數 定義區域性靜態變數 定義靜態函式。1 定義全域性靜態變數 在全域性變數前面加上關鍵字static,該全域性變數變成了全域性靜態變數。全域性靜態變數有以下特點。a.在全域性區分配記憶體。b.如果沒有初始化,其預設值為0.c.該變數在本檔案內...
static和extern的使用
1 修飾區域性變數 static修飾區域性變數,該區域性變數便存放在靜態資料區,其生命週期一直持續到整個程式執行結束,但作用域仍限於該語句塊。特別注意的是,用static修飾區域性變數後,該變數只在初次執行時進行初始化工作,且只進行一次。includevoid fun int main void 程...