static in c language
生活随笔
收集整理的這篇文章主要介紹了
static in c language
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
這里的重點不是靜態(tài)(全局/局部)變量、靜態(tài)函數(shù),我們從其他角度說一說static.
static關(guān)鍵字,針對的是變量和函數(shù),而不是結(jié)構(gòu)。因此,不能對struct、union等結(jié)構(gòu)賦予static屬性,我們來分析一下。
static variable
以下是C程序的內(nèi)存布局
Memory Layout of C Programs
- 初始化的全局變量,存在initialized data段
- 未初始化的全局變量,存在bss段
- 局部變量,存在stack段
- 動態(tài)申請的變量,存在heap段
- 靜態(tài)局部/全局變量,初始化的放在data段,未初始化的放在bss段,且初始化為0.
- 靜態(tài)全局變量,只能在當(dāng)前C文件使用
- 靜態(tài)局部變量,只能在它所在的代碼塊內(nèi)使用
需要注意的是,靜態(tài)局部變量在函數(shù)被調(diào)用的時候,變量對應(yīng)的語句不會被執(zhí)行。
因此來說,static可以對變量使用!它使得變量的范圍縮小、內(nèi)容持久且默認(rèn)初始化為0。
static function
這個沒什么好說的,使用了static attribute的function,作用范圍是當(dāng)前C文件,其他C文件不可用,就類似于私有。
static 不可用于struct enum等結(jié)構(gòu)
我們需要明白,static作用的對象,必須是存在的
- 對于struct,如果只是定義結(jié)構(gòu),而沒有定義變量,那么不能使用static,因為它只代表的是自定義數(shù)據(jù)類型,編譯完就消失了,static是沒有意義的。
上述代碼會報錯的!
static struct mys{int a;int b; } test;上述代碼就沒錯,因為你定義了變量,并且,你其實還可以給這個變量賦值。
static struct mys{int a;int b; } test = {100, 30};union也是同理!
- 其實enum也是一樣的道理,它可能跟struct內(nèi)部定義不太一樣,但是從外部看,是一樣的!使用static的方式也一樣。
總結(jié)
以上是生活随笔為你收集整理的static in c language的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑姬和剑豪谁厉害
- 下一篇: verilator编译 更新文件的规则