c語言全域性變數與靜態本地變數

2021-10-14 15:25:20 字數 1769 閱讀 4726

目錄

全域性變數

靜態本地變數

一、定義

定義在函式外面的變數是全域性變數

全域性變數具有全域性的生存期和作用域

他們與任何函式都無關

在任何函式內部都可以使用他們

實驗:

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來釋放。...