c語言中static關鍵字有兩個作用

2021-06-13 04:07:19 字數 1112 閱讀 9068

c語言中static關鍵字有兩個作用,一是檔案作用域,二是函

數作用域。 

一、檔案作用域 

檔案作用域關鍵字static的作用是,以static申明的全域性變數、函式不得被其他檔案所引用,例如: 

//這是mystr.c檔案的內容 

#include

static int num = 10; 

int mynum = 100; 

static int str_len(char *str) 

int mystr_len(char *str) 

當你mystr.c檔案中的str_len函式加上了static關鍵字,你便不能在其他的地方復用這個函式,譬如,你不能這樣寫:

//這是main.c 的內容 

#include

int main() 

gcc main.c mystr_len.c 

將不能編譯通過,因為mystr.c中的num變數和str_len函式都用了static關鍵字,導致他們只能在mystr.c中被使用,如檔案中的mystr_len函式可以引用num變數和str_len函式。 

//這是main.c 的內容 

#include

int main() 

當不用static關鍵字時,等同於extern,即 

int mystr_len(char *str)  和 

extern int mystr_len(char *str) 

是一樣的。 

二、函式作用域 

static另外乙個用途是函式內部靜態變數,最常用的情況是 

int *test() 

int main() 

該函式返回整數num的指標,在main函式中列印*test將會出現段錯誤,因為num做為test函式內部,只能在test內部被訪問。以下程式是正確的。 

int *test() 

int main() 

該程式中num變數加了關鍵字static,函式執行結束後,依然可以在其他地方被引用,只是不能直接通過變數名訪問,而要間接通過指標訪問,原因是 static變數儲存在全域性資料段中而不是函式棧中。讀者可以將它看作特殊的全域性變數,只是其他地方只能通過指標來訪問,而不能直接通過變數名訪問。

C語言中的static關鍵字

c語言中的變數 1.自動變數。變數在執行到他的塊尾時就超出了作用域,它在堆疊上分配的記憶體會被釋放,以供另乙個函式使用。它們是在宣告時自動建立的,在程式退出宣告它的塊後自動刪除。2.全域性變數。可以在任意位置訪問,它的宣告方式和一般變數相同,但是它的位置非常重要,這個位置決定了變數是否為全域性變數。...

C語言中的static關鍵字

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

C語言中static關鍵字用法

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