目錄
全域性變數
靜態本地變數
一、定義
定義在函式外面的變數是全域性變數
全域性變數具有全域性的生存期和作用域
他們與任何函式都無關
在任何函式內部都可以使用他們
實驗:
int f(void );
int gall=12;//乙個全域性變數
也就是全域性變數一改都改
二、全域性變數的初始化
沒有做初始化的全域性變數會得到0值(本地變數會得到乙個記憶體中莫名其妙的值)
指標會得到null值
只能用編譯時刻已知的值來初始化全域性變數
他們的初始化發生在main函式之前
也就是:不能 int g2=10; int gall=12;
但是可以:
const int gall=12;int g2=gall;
//不推薦
當不給gall賦值時,上面**的結果
警告:全域性變數不應該和另乙個全域性變數聯絡在一塊,在複雜的程式裡面很難知道全域性變數的初始化順序
一、定義
1、在本地變數定義時加上static修飾符,就會成為靜態本地變數
2、當函式離開的時候,
靜態本地變數會繼續存在並保持其值
3、靜態本地變數的初始化只會在第一次進入這個函式時做,以後進入函式時會保持上次離開時的值
int f(void )
這次沒用static修飾all,在主函式中呼叫3次f()
這次用static修飾
static int all=1;
printf("這是在%s裡面%d\n",__func__,all);
all+=2;
printf("再一次在%s裡面%d\n",__func__,all);
靜態本地變數實際上是特殊的全域性變數
它們位於相同的記憶體區域
做個試驗:
gall是全域性變數
all是靜態本地變數
k是區域性變數
他們的位址如下
會發現全域性變數和靜態本地變數幾乎放在一起,而本地變數很遠
靜態本地變數具有全域性的生存期,函式內的區域性作用域
static 在這裡的意思是區域性作用域(本地可訪問)
三、被隱藏的全域性變數
如果函式內部存在於全域性變數同名的變數,則全域性變數會被隱藏,也就是函式(或大括號內)的本地變數優先
c語言小結 全域性變數與靜態本地變數
一.全域性變數 1.定義 定義在函式外面的變數是全域性變數。2.初始化 初始化在main函式之前,沒做初始化的全域性變數會得到0值。3.如果函式內部存在於全域性變數同名的變數,則全域性變數會被隱藏。二.靜態本地變數 1.定義 在本地變數定義時加上static修飾符 2.作用 當函式離開的時候,靜態本...
c 全域性變數 靜態全域性變數
全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...
C 靜態全域性變數與普通全域性變數
一 儲存區域 1 棧 由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區域。通常儲存區域性變數,函式引數。2 堆 由new分配的記憶體塊,需要手動釋放。如果程式設計師沒有手動釋放,在程式執行結束後,作業系統自動 3 自由儲存區 由malloc等分配的記憶體塊,與堆相似,用free來釋放。...