在c語言中,static的字面意思很容易把我們匯入歧途,其實作用有三條:
(1)第一條也是最重要的一條:隱藏
當我們同事編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性,舉例來說:同時編譯2個原始檔:a.c和main.c
下面是a.c的內容
chara =
'a';
//global variable
intmsg()
下面是main.c的內容
intmain(
void)
程式的執行結果是:
a hello
這個結果不難理解,因為使用了宣告extern。
但是如果在a中增加static,那麼就會將其隱藏,main.c就看不到a和msg函式了,那麼問題來了,為什麼要使用static呢,其實利用這一特性,可以在不同的檔案中定義同名函式和同名變數,只需要新增static即可,這一就不比擔心命名的衝突了,總的來講,此處static的作用僅限於隱藏。
(2)static的第二個作用是保持變數內容的持久,儲存在靜態資料區的變數會在程式開始執行時就完成初始化,這也是唯一的一次初始化,共有2種變數儲存在靜態儲存區:全域性變數和static變數,只不過和全域性變數比起來,static可以控制變數的可見範圍,所到底static還是用來隱藏的。舉例如下:
#include
<
stdio.h
>
intfun(
void
)int
count =1
;int
main(
void
)程式執行結果:
通過這個執行結果,就可以發現,所到底static還是用來隱藏的。
(3)static的第三個作用就是預設初始化為0,其實全域性變數也具備這一屬性,因為全域性變數也儲存在靜態資料區,在靜態資料區,記憶體中的所有位元組預設值都是0x00,這一特點可以減少程式設計師的工作量。
最後,總結static的作用:首先static的最主要功能是隱藏,其次因為static變數存放在靜態儲存區,所以它具備永續性和預設值0.
C語言之static辨析
1 概述 static 宣告的變數在c語言中有兩方面的特徵 1 變數會被放在程式的全域性儲存區中,這樣可以在下一次呼叫的時候還可以保持原來的賦值。這一點是它與堆疊變數和堆變數的區別。td 2 變數用static告知編譯器,自己僅僅在變數的作用範圍內可見。這一點是它與全域性變數的區別。2 問題 sta...
C語言之static用法
1,static修飾全域性變數 限定變數的作用域。被static修飾的全域性變數儲存域不變,依然儲存在靜態儲存區,即bss段或data段。但作用域發生改變,被static修飾全域性變數只能被本檔案的函式訪問,對於其他原始檔是不可見的,哪怕用extern宣告也不可見。2,static修飾區域性變數 限...
c語言之static 命名規則
作用一 修飾變數 區域性變數 在函式體內部定義的,這個變數只能在這個函式內使用,同一檔案的其它函式也沒法使用。它是儲存於靜態區的,即時函式執行結束了,靜態變數也不會銷毀,下次使用的時候任然可以用裡面的值。靜態區域性變數 裡面可以不用初始化,編譯器默認初始化為0。只進行唯一的 第一次 初始化。作用二 ...