C語言中static關鍵字用法小結

2021-07-03 16:16:58 字數 1286 閱讀 9091

c語言中定義的static關鍵字主要有兩個作用。(c++對它進行了擴充套件,有三個作用。)

第乙個作用是修飾變數,又可分為修飾全域性變數和修飾區域性變數兩種情況。

1.修飾全域性變數:全域性變數的值存放在棧上,其儲存型別為靜態儲存型別,不管有沒有在其前加static關鍵字,因此,全域性變數的作用域為從定義全域性變數起始處到檔案結尾處。沒有加static關鍵字的全域性變數,除了可以在其定義的檔案之中被引用外,其他檔案也可以通過使用extern宣告來引用它。但是,加了static關鍵字的全域性變數,其他檔案即使使用extern宣告也無法引用它。

2.修飾區域性變數:若區域性變數前沒有加static關鍵字,則其值存放在堆上,儲存型別為動態儲存型別,作用域為從變數定義起始處到函式結束處,可以被初始化任意次,若未指定初始化值,則預設初始化值是乙個任意數。若區域性變數前加了static關鍵字,則其值存放在棧上,儲存型別為靜態儲存型別,作用域為從變數定義起始處到檔案結尾處,只能被初始化一次,若未指定初始化值,則預設初始化值為0。如以下**:

#include

static localval()

void main()

static關鍵字修飾的變數一般不能作為函式形參。像下面這段**,vc下編譯,會給出乙個警告,然後忽略static。

#include

staticlocalval(static int a)//vc下編譯,a的位址為0x0012ff2c,處於堆位址,可見static被忽略掉了

void main()

static.c(3) : warning c4042: 'a' : has bad storage class

乙個函式中定義的static變數,能不能被其他函式引用呢?

在vc下執行如下**,會出來兩個連線錯誤,可見,靜態區域性變數,只能在其定義的函式內部使用。

#include

staticlocalval()

callstalocval()

void main()

static.obj : error lnk2001: unresolved external symbol _a

debug/static.exe : fatal error lnk1120: 1 unresolved externals

第二個作用是修飾函式。

static修飾函式,不改變函式的儲存型別,只是改變函式的作用域。沒有加static的函式,其他檔案可以通過使用extern來呼叫函式,若函式前加了static關鍵字,則該函式只能在本檔案中使用(所以又稱內部函式)。使用內部函式的好處是:不同的人編寫不同的檔案時,不用擔心自己定義的函式,會與其他人寫的函式同名。

C語言中static關鍵字用法

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

C語言中static關鍵字用法

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

C語言中static關鍵字的用法

static關鍵字在c語言中主要有兩種用法 unsigned char test int main getchar unsigned char test static unsigned char i i return i 以上輸出後i的數值會遞增,如果去掉static關鍵字,程式編譯提示區域性變數未...