C語言存儲(chǔ)

參考:

C存儲(chǔ)類-菜鳥教程
C語言register關(guān)鍵字—最快的關(guān)鍵字
c primer plus 6th edition
C作用域規(guī)則


變量

作用域是程序中定義的變量所存在的區(qū)域内颗,超過該區(qū)域變量就不能被訪問。

  1. 在函數(shù)內(nèi)部或塊內(nèi)部的局部變量
    在某個(gè)函數(shù)或塊的內(nèi)部聲明的變量稱為局部變量。它們只能被函數(shù)或該代碼內(nèi)部的語句使用咕宿。
    局部變量在函數(shù)外部是不可知的。下面是使用局部變量的實(shí)例叫搁。在這里匈仗,所有的變量 a、b 和 c 是 main() 函數(shù)的局部變量悍手。
    #include 

    int main ()
    {
      /* 局部變量聲明 */
      int a, b;
      int c;

      /* 實(shí)際初始化 */
      a = 10;
      b = 20;
      c = a + b;

      printf ("value of a = %d, b = %d and c = %dn", a, b, c);

      return 0;
    }
  1. 在所有函數(shù)外部的全局變量
    全局變量是定義在函數(shù)外部帘睦,通常是在程序的頂部。全局變量在整個(gè)程序生命周期內(nèi)都是有效的谓苟,在任意的函數(shù)內(nèi)部能訪問全局變量官脓。
    全局變量可以被任何函數(shù)訪問。也就是說涝焙,全局變量在聲明后整個(gè)程序都可以用卑笨。
#include<stdio.h>
/* 全局變量 */
int g;
int main(){
  return 0;
}

在程序中,局部變量和全局變量的名稱可以相同仑撞,但是在函數(shù)內(nèi)赤兴,局部變量的值會(huì)覆蓋全局變量的值妖滔。

    #include 

    /* 全局變量聲明 */
    int g = 20;

    int main ()
    {
      /* 局部變量聲明 */
      int g = 10;

      printf ("value of g = %dn",  g);

      return 0;
    }

運(yùn)行結(jié)果是:

value of g = 10
  1. 在形式參數(shù)的函數(shù)參數(shù)定義中
    函數(shù)的參數(shù),形式參數(shù)桶良,被當(dāng)作該函數(shù)內(nèi)的局部變量座舍,它們會(huì)優(yōu)先覆蓋全局變量。

作用域

一個(gè)C變量的作用域可以是塊作用域陨帆,函數(shù)作用域曲秉,函數(shù)原型作用域或文件作用域。

  • 塊作用域
    塊是一對(duì)花括號(hào)括起來的代碼區(qū)域疲牵。
    我們使用的局部變量都具有塊作用域承二。
double blocky(double cleo){
  double patrick = 0.0;
  ...
  return patrick;
}
  • 函數(shù)作用域
    僅用于goto語句的標(biāo)簽。這意味著即使一個(gè)標(biāo)簽首次出現(xiàn)在函數(shù)的內(nèi)層塊中纲爸,它的作用域也延伸至整個(gè)函數(shù)亥鸠。

  • 函數(shù)原型作用域
    用于函數(shù)原型中的形參名(變量名)
    int mighty(int mouse, double large);
    函數(shù)原型作用域的范圍是形參定義處到原型聲明結(jié)束。這意味著识啦,編譯器在處理函數(shù)原型中的形參時(shí)只關(guān)心它的類型负蚊。而形參名(如果有的話)通常無關(guān)緊要。

  • 文件作用域
    定義在函數(shù)的外面的變量具有文件作用域颓哮,具有文件作用域的變量家妆,從它的定義處到改定義所在文件的末尾均可見。
    所有文件作用域變量也稱為全局變量题翻。

鏈接

C變量有三種鏈接屬性:外部鏈接揩徊、內(nèi)部鏈接或無鏈接
具有塊作用域、函數(shù)作用域或函數(shù)原型作用域的變量都是無鏈接變量嵌赠。這意味這些變量術(shù)語定義他們的塊塑荒、函數(shù)和原型私有。
具有文件作用域的變量可以是外部鏈接或內(nèi)部鏈接姜挺。外部鏈接變量可以在多文件程序找使用齿税,內(nèi)部鏈接變量只能在一個(gè)翻譯單元中使用。

C存儲(chǔ)類

C程序中的存儲(chǔ)類包括如下:

  • auto
  • register
  • static
  • extern

auto

{
  int mount;
  auto int month;
}

auto存儲(chǔ)類是所有局部變量默認(rèn)的存儲(chǔ)類
auto 只能用在函數(shù)內(nèi)炊豪,即 auto 只能修飾局部變量

register

register 存儲(chǔ)類用于定義存儲(chǔ)在寄存器中而不是 RAM 中的局部變量凌箕。這意味著變量的最大尺寸等于寄存器的大小(通常是一個(gè)詞)词渤,且不能對(duì)它應(yīng)用一元的 '&' 運(yùn)算符(因?yàn)樗鼪]有內(nèi)存位置)牵舱。

{
  register int miles;
}

寄存器只用于需要快速訪問的變量,比如計(jì)數(shù)器缺虐。還應(yīng)注意的是芜壁,定義‘register’并不意味著變量將存儲(chǔ)在寄存器中,它意味著變量可能存儲(chǔ)在寄存器中,這取決于硬件和實(shí)現(xiàn)的限制慧妄。

register變量必須是能被CPU寄存器所接受的類型顷牌。意味著register變量必須是一個(gè)單個(gè)的值,并且其長度應(yīng)小于或等于整數(shù)的長度塞淹。

盡量在大量頻繁的操作時(shí)使用寄存器變量窟蓝,且聲明的變量個(gè)數(shù)應(yīng)該盡量的少

static

static 存儲(chǔ)類指示編譯器在程序的生命周期內(nèi)保持局部變量的存在,而不需要在每次它進(jìn)入和離開作用域時(shí)進(jìn)行創(chuàng)建和銷毀饱普。因此运挫,使用 static 修飾局部變量可以在函數(shù)調(diào)用之間保持局部變量的值。
static 修飾符也可以應(yīng)用于全局變量费彼。當(dāng) static 修飾全局變量時(shí)滑臊,會(huì)使變量的作用域限制在聲明它的文件內(nèi)。
static 是全局變量的默認(rèn)存儲(chǔ)類箍铲,以下兩個(gè)變量 (count 和 road) 都有一個(gè) static 存儲(chǔ)類。

static int count;
int road;
main()
{
}

extern 存儲(chǔ)類

extern 存儲(chǔ)類用于提供一個(gè)全局變量的引用鬓椭,全局變量對(duì)所有的程序文件都是可見的颠猴。當(dāng)您使用 'extern' 時(shí),對(duì)于無法初始化的變量小染,會(huì)把變量名指向一個(gè)之前定義過的存儲(chǔ)位置翘瓮。

當(dāng)您有多個(gè)文件且定義了一個(gè)可以在其他文件中使用的全局變量或函數(shù)時(shí),可以在其他文件中使用 extern 來得到已定義的變量或函數(shù)的引用裤翩∽手眩可以這么理解,extern 是用來在另一個(gè)文件中聲明一個(gè)全局變量或函數(shù)踊赠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呵扛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筐带,更是在濱河造成了極大的恐慌今穿,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伦籍,死亡現(xiàn)場離奇詭異蓝晒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帖鸦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門芝薇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人作儿,你說我怎么就攤上這事洛二。” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵灭红,是天一觀的道長侣滩。 經(jīng)常有香客問我,道長变擒,這世上最難降的妖魔是什么君珠? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮娇斑,結(jié)果婚禮上策添,老公的妹妹穿的比我還像新娘。我一直安慰自己毫缆,他們只是感情好唯竹,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苦丁,像睡著了一般浸颓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旺拉,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天产上,我揣著相機(jī)與錄音,去河邊找鬼蛾狗。 笑死晋涣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沉桌。 我是一名探鬼主播谢鹊,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼留凭!你這毒婦竟也來了佃扼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤冰抢,失蹤者是張志新(化名)和其女友劉穎松嘶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挎扰,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翠订,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了遵倦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尽超。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖梧躺,靈堂內(nèi)的尸體忽然破棺而出似谁,到底是詐尸還是另有隱情傲绣,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布巩踏,位于F島的核電站秃诵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏塞琼。R本人自食惡果不足惜菠净,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彪杉。 院中可真熱鬧毅往,春花似錦、人聲如沸派近。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渴丸。三九已至侯嘀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曙强,已是汗流浹背残拐。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碟嘴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓囊卜,卻偏偏與公主長得像娜扇,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栅组,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 存儲(chǔ)類定義 C 程序中變量/函數(shù)的范圍(可見性)和生命周期雀瓢。這些說明符放置在它們所修飾的類型之前。下面列出 C 程...
    徐大哈_401d閱讀 217評(píng)論 0 0
  • 1玉掸、c語言的函數(shù)有以下特點(diǎn): (1)才源程序由函數(shù)組成刃麸,一個(gè)主函數(shù)main()+若干其他函數(shù) C程序中的函數(shù)類似文...
    滕王閣序閱讀 1,347評(píng)論 0 6
  • 大學(xué)生是一個(gè)非常有趣的群體泊业,他們整天無所事事。于是他們便會(huì)做一些自己喜歡做的事情啊易,發(fā)展自己的愛好吁伺。 ...
    好年月閱讀 398評(píng)論 0 2
  • 如何界定一位CFO是合格的?應(yīng)該具備哪些素質(zhì)租谈?應(yīng)該擁有什么樣的能力篮奄?這是越來越受到關(guān)注的一個(gè)話題。本文把討論對(duì)象聚...
    HANXLEE閱讀 2,059評(píng)論 0 5