鏈接屬性,存儲類型總結(jié)

鏈接屬性

標(biāo)識符的鏈接屬性決定如何處理在不同文件中出現(xiàn)的標(biāo)識符

鏈接屬性一共有三種:

  1. external 外部鏈接屬性 -- 屬于external的標(biāo)識符不論聲明多少次,位于幾個源文件都表示同一個實(shí)體
  2. internal 內(nèi)部鏈接屬性 -- 屬于internal的標(biāo)識符在同一個源文件內(nèi)的所有聲明中都指向同一個實(shí)體,但位于不同源文件的多個生命則分屬不同的實(shí)體
  3. none 無鏈接屬性 -- 該標(biāo)識符的多個聲明被當(dāng)做獨(dú)立不同的實(shí)體

只要變量并非聲明于代碼塊或函數(shù)定義內(nèi)部,這個變量的鏈接屬性默認(rèn)為external

關(guān)鍵字staticextern可以修改鏈接屬性。如果聲明本身具有external鏈接屬性,在前面加上static可以使這個聲明的鏈接屬性變?yōu)閕nternal, 這樣可以防止變量被其他源文件調(diào)用

  • static關(guān)鍵字支隊默認(rèn)鏈接屬性為external的聲明才有改變鏈接屬性的效果(比如,對某一個代碼塊內(nèi)部聲明的變量加上static并不會改變該變量的鏈接屬性,改變的只是這個變量的存儲類型,因?yàn)檫@個變量聲明在函數(shù)內(nèi)部,其默認(rèn)鏈接屬性不是external)

  • extern關(guān)鍵字用于源文件中某個標(biāo)識符的第一次聲明時,它指定該標(biāo)識符具有external鏈接屬性,但是如果用于該標(biāo)識符的第二次或以后的聲明時,它不會更改第一次聲明所指定的鏈接屬性, 例子:

    static int i; //internal鏈接屬性
    int func() {
        extern int i; //并沒有更改上面的i的鏈接屬性,這里聲明的i會隱藏上面聲明的i
    }

存儲類型

變量的存儲類型由它的聲明位置所決定

  • 任何在代碼塊之外聲明的變量總是存儲于靜態(tài)內(nèi)存中,即不屬于堆棧的內(nèi)存,這類變量被稱為靜態(tài)變量,靜態(tài)變量在程序運(yùn)行之前創(chuàng)建,在程序的整個執(zhí)行期間始終存在,它始終保持原先的值,除非給它賦值新的值或程序結(jié)束

靜態(tài)變量如果不顯示指定其初始值,靜態(tài)變量將初始化為0

  • 在代碼塊內(nèi)部聲明的變量存儲于堆棧中,如果給一個位于代碼塊內(nèi)部的變量加上static關(guān)鍵字,可以將這個變量改為靜態(tài)變量
  • 關(guān)鍵字register可以指示將代碼塊內(nèi)部的變量的存儲在機(jī)器的硬件寄存器而不是內(nèi)存中,這類變量成為寄存器變量,一般來說,寄存器變量比存儲在內(nèi)存的變量訪問效率要高,但這并不意味著可以將每個變量都聲明為register,如果有太多register變量,編譯器只會選取前幾個實(shí)際存儲于寄存器

static關(guān)鍵字總結(jié)

  1. static用于函數(shù)聲明或者位于代碼塊之外的變量聲明時, static用于修改鏈接屬性,從external改為internal
  2. static用于代碼塊內(nèi)部的變量時,sttaic用于修改變量的存儲類型,將變量修改為靜態(tài)變量,但不改變鏈接屬性
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,692評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,824評論 18 399
  • 想要成功,就先從你的心理素質(zhì)鍛煉起。很多時候,我們每個人的原始差別是不大的,最大的區(qū)別就在于從小各自培養(yǎng)起來的心理...
    happyzhu閱讀 1,490評論 0 1
  • 聶離點(diǎn)了點(diǎn)頭,那可是億級的獸潮,他們必須從現(xiàn)在開始做好準(zhǔn)備。 楊欣面色一凜,道:“我明白了,這件事情我會安排下去的...
    im喵小姐閱讀 869評論 0 1
  • 從12年畢業(yè)以來就意識到寫作能力對于一個人非常重要,并想要去通過每天的寫作練習(xí)逐漸的提高自己的寫作能力,但是現(xiàn)實(shí)是...
    劉軍亮閱讀 727評論 0 3

友情鏈接更多精彩內(nèi)容