C語言中static的使用介紹

2022-09-20 18:39:08 字數 1309 閱讀 3507

目錄

首先讓我看看這段**

#includewww.cppcns.com>

void test()

int main()

return 0;

}你認為輸出的結果是什麼呢?

那為什麼結果是2222222222呢

因為區域性變數 a 進入這個範圍建立 出了這個範圍銷毀 所以結果都是2

當我們加上static 的結果又會是什麼

那為什麼加上 static 結果就不一樣了

我們研究一下static的使用原理

我們的記憶體分為三大類

我們的區域性變數放在棧區

而static把a放在了靜態區 而在靜態區的變數 出了他的範圍是不銷毀的

我們對比一下 可能更加直觀

所以 static 修飾區域性變數的時候,其實改變的是區域性變數得儲存位置

靜態得區域性變數是放在靜態區,放在靜態區的變數出了作用域是不會銷毀的nksfe,相當於生命週期延長了。

補充 變數的作用域是不變的,只是生命週期延長了

我們再建立乙個原始檔

全域性變數的作用域是整個工程

如果我們想引用另乙個原始檔的函式 這裡我們不得不說 extern 這個關鍵字

如圖static 可以修飾全域性變數 如果我們再全域性變數前 加上static會是什麼結果呢

此時就會報錯

www.cppcns.com乙個全域性變數具有外部鏈結屬性的 (就是可以被其他原始檔引用)但是被static 修飾後外部鏈結屬性就變成了內部鏈結屬性 只能在自己所在的原始檔內部使用不能在其他檔案內部使用

所以再次除錯的時候就會報錯

那 static 修飾的全域性變數的本質是 外部鏈結屬性發生改變 而不是他的作用域變小

static 修飾全域性變數的意義是 如果你定義了乙個全域性變數 別人用 extern 就可以隨便使用

如果你不想讓別人看 就可以用static .

我們用另乙個原始檔建立乙個函式 如圖

用 關鍵字extern 宣告後 除錯結果

這裡我們在函式前加上static 又會是什麼結果呢

其實乙個函式本身具有外部程式設計客棧鏈結屬性 被static修飾後 外部鏈結屬性變成了內部鏈結屬性 只能在源2.c 內部使用 其他原始檔無法使用 使用上感覺作用域變小

我們可以發現 static 修飾全域性變數和修飾函式用法一樣

當我們使用乙個區域性變數 出了他的範圍 不希望他被銷毀下次進來之後還在 那我們就可以拿static 修飾

當我們希望乙個全部變數 在他自己原始檔使用 任意其他地方不想讓別人看到 也可以用static修飾

當我們寫的函式只是自己用一下 不希望別人引用 則也可以用static修

static在C語言中的使用

static在c語言中的用法主要是倆中 1.修飾區域性變數 static修飾區域性變數時存放在靜態儲存區,生命週期是整個程式生命週期。static在區域性變數使用時初次定義就要初始化,且只能初始化一次,如果不初始化就自動賦值為0。重複呼叫同一函式,第二次呼叫時不會執行static區域性變數初始化的那...

C 語言中的static

static 在c語言中,關鍵字 static 有三個明顯的作用 1 在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。3 在模組內,乙個被宣告為靜態的...

c語言中的static

1 用static宣告區域性變數 用關鍵字static宣告區域性變數為 靜態區域性變數 時,可以讓該區域性變數在函式呼叫結束後不消失而保留原值,即其占用的儲存單元不釋放。static int a 1 2 用static宣告外部變數 有時在程式設計中,希望某些外部變數只限於被本檔案引用,而不能被其他檔...