C語言中的static關鍵字

2021-09-01 10:18:14 字數 1340 閱讀 2016

c語言中的變數:

1.自動變數

變數在執行到他的塊尾時就超出了作用域,它在堆疊上分配的記憶體會被釋放,以供另乙個函式使用。它們是在宣告時自動建立的,在程式退出宣告它的塊後自動刪除。

2.全域性變數。可以在任意位置訪問,它的宣告方式和一般變數相同,但是它的位置非常重要,這個位置決定了變數是否為全域性變數。

3.靜態變數。由static修飾的變數,只能在包含其宣告的函式中可見,但它是乙個全域性變數,可以用全域性變數的方式使用它。

static關鍵字:

在c語言中,static可以用來修飾區域性變數,全域性變數以及函式。在不同的情況下static的作用不盡相同。

(1)修飾區域性變數

一般情況下,對於區域性變數是存放在棧區的,並且區域性變數的生命週期在該語句塊執行結束時便結束了。但是如果用static進行修飾的話,該變數便存放在靜態資料區,其生命週期一直持續到整個程式執行結束。但是在這裡要注意的是,雖然用static對區域性變數進行修飾過後,其生命週期以及儲存空間發生了變化,但是其作用域並沒有改變,其仍然是乙個區域性變數,作用域僅限於該語句塊。

在用static修飾區域性變數後,該變數只在初次執行時進行初始化工作,且只進行一次。 如:

#includevoid fun()  

int main(void)

程式執行結果為: 2  3

說明在第二次呼叫fun()函式時,a的值為2,並且沒有進行初始化賦值,直接進行自增運算,所以得到的結果為3.

對於靜態區域性變數如果沒有進行初始化的話,對於整形變數系統會自動對其賦值為0,對於字元陣列,會自動賦值為'\0'.

(2)修飾全域性變數

static對全域性變數進行修飾改變了其作用域的範圍,由原來的整個工程可見變為本原始檔可見

對於乙個全域性變數,它既可以在本原始檔中被訪問到,也可以在同乙個工程的其它原始檔中被訪問(只需用extern進行宣告即可)。 如:

//有file1.c  

int a=1;

file2.c

#includeextern int a;

int main(void)

則執行結果為 1

但是如果在file1.c中把int a=1改為static int a=1;

那麼在file2.c是無法訪問到變數a的。原因在於用static對全域性變數進行修飾改變了其作用域的範圍,由原來的整個工程可見變為本原始檔可見。

(3)修飾函式

用static修飾函式的話,情況與修飾全域性變數大同小異,就是改變了函式的作用域。

C語言中的static關鍵字

static關鍵字,意為靜態。靜態區域性變數void add test 靜態全域性變數 c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化...

C語言中static關鍵字用法

static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。變數1.區域性變數 普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數 不加static修飾符 都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就是說它的值在初始時是不確定的,除...

C語言中static關鍵字用法

概述 static關鍵字在c語言中比較常用,使用恰當能夠大大提高程式的模組化特性,有利於擴充套件和維護。在程式中使用static 變數1.區域性變數 普通區域性變數是再熟悉不過的變數了,在任何乙個函式內部定義的變數 不加static修飾符 都屬於這個範疇。編譯器一般不對普通區域性變數進行初始化,也就...