国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

全局變量、局部變量和靜態(tài)變量

這篇具有很好參考價值的文章主要介紹了全局變量、局部變量和靜態(tài)變量。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

全局變量

定義:在函數(shù)外定義的變量是全局變量,全局變量可以為本文件中其它函數(shù)所共用,它的有效范圍從定義變量的位置開始到本源文件結(jié)束。

  • 設(shè)全局變量的作用:增加了函數(shù)間數(shù)據(jù)聯(lián)系的渠道;
  • 不必要時不要使用全局變量,因?yàn)椋篴) 全局變量在程序的全部執(zhí)行過程中都占用存儲單元; b) 使得函數(shù)的通用性降低;c) 全局變量使用過多,會降低程序的清晰性;
  • 如果外部變量在文件開頭定義,則在整個文件范圍內(nèi)都可以使用該外部變量,如果不在文件開頭定義,按上面規(guī)定作用范圍只限于定義點(diǎn)到文件終了,如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在該函數(shù)中用關(guān)鍵字extern作外部變量說明;
  • 如果在同一個源文件中,外部變量與局部變量同名,則在局部變量的作用范圍內(nèi),外部變量不起作用。

局部變量

定義: 在一個函數(shù)內(nèi)部定義的變量是局部變量,它只在本函數(shù)范圍內(nèi)有效。

  • 主函數(shù)main定義的變量也只在主函數(shù)有效;
  • 不同函數(shù)中可以使用名字相同的變量,它們代表不同的對象,互不干擾;
  • 形式參數(shù)也是局部變量;
  • 在一個函數(shù)內(nèi)部,可以在復(fù)合語句中定義變量,這些變量只在本復(fù)合語句中有效。

靜態(tài)變量

變量定義前加上 static

  • 靜態(tài)變量的作用范圍要看靜態(tài)變量的位置,如果在函數(shù)里,則就是靜態(tài)局部變量,作用范圍就是這個函數(shù);
  • 靜態(tài)全局變量,只在本文件可以用,雖然整個程序包含多個文件, 但靜態(tài)全局變量只能用在定義它的那個文件里,卻不能用在程序中的其他文件里。它是定義存儲因型為靜態(tài)型的外部變量,其作用域是從定義點(diǎn)到程序結(jié)束,所不同的是存儲類型決定了存儲地點(diǎn),靜態(tài)型變量是存放在內(nèi)存的數(shù)據(jù)區(qū)中的, 它們在程序開始運(yùn)行前就分配了固定的字節(jié), 在程序運(yùn)行過程中被分配的字節(jié)大小是不改變的,只有程序運(yùn)行結(jié)束后,才釋放所占用的內(nèi)存。

思考

1、static全局變量與普通的全局變量有什么區(qū)別?

  • 全局變量(外部變量)的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲方式。這兩者在存儲方式上并無不同。
  • 這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,當(dāng)一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。
  • 從以上分析可以看出, 把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域, 限制了它的使用范圍。

2、static函數(shù)與普通函數(shù)有什么區(qū)別?

  • static函數(shù)與普通函數(shù)作用域不同,僅在本文件。
  • 只在當(dāng)前源文件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。
  • 對于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件。

3、static局部變量和普通局部變量有什么區(qū)別?

  • static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值。

總結(jié)

  • 全局變量的作用域是整個項(xiàng)目,它只需要在一個源文件中定義就可以作用于所有的源文件,其它不包括全局變量定義的文件需要用extern關(guān)鍵字再次聲明這個全局變量。
  • 全局變量、靜態(tài)全局變量、靜態(tài)局部變量都是在靜態(tài)存儲區(qū)(全局?jǐn)?shù)據(jù)區(qū))中分配空間的,而局部變量是在棧上分配空間的。
  • 全局變量、靜態(tài)變量的生命期和程序生命期是一樣的,在程序結(jié)束之后操作系統(tǒng)會回收空間。
  • 全局變量和靜態(tài)變量都是保存在靜態(tài)存儲區(qū)中,生命期和程序一樣,但是不同的是全局變量的作用域是整個項(xiàng)目,而靜態(tài)全局變量是當(dāng)前程序文件,靜態(tài)局部變量則是當(dāng)前函數(shù)體內(nèi)。全局變量和靜態(tài)全局變量、靜態(tài)局部變量默認(rèn)值都是0,也就是在沒有初始化變量值的時候默認(rèn)為0。
  • 靜態(tài)變量包含靜態(tài)局部變量和靜態(tài)全局變量。靜態(tài)局部變量具有局部作用域只對定義自己的函數(shù)可見,只被初始化一次,自從初始化一次之后直到程序運(yùn)行期間一直都在。靜態(tài)全局變量具有全局作用域作用于定義它的程序文件但是不能作用于項(xiàng)目里的其它文件,這一點(diǎn)和全局變量不同。靜態(tài)全局變量可以被多次初始化。
  • 把局部變量改變?yōu)殪o態(tài)變量之后是改變了它的存儲方式和生命期。把全局變量改變?yōu)殪o態(tài)變量之后是改變了它的作用域,限制了使用范圍。

C/C++語言經(jīng)過編譯之后將內(nèi)存分為以下幾個區(qū)域:

  1. 棧(stack)區(qū):由編譯器進(jìn)行管理,自動分配和釋放,存放函數(shù)調(diào)用過程中的各種參數(shù)、局部變量、局部常量、返回值以及函數(shù)返回地址。操作方式類似數(shù)據(jù)結(jié)構(gòu)中的棧。
  2. 堆(heap)區(qū):用于程序動態(tài)申請分配和釋放空間。C語言中的malloc和free,C++中的new和delete均是在堆中進(jìn)行的。正常情況下,程序員申請的空間在使用結(jié)束后應(yīng)該釋放,若程序員沒有釋放空間,則程序結(jié)束時系統(tǒng)自動回收。注意:這里的“堆”并不是數(shù)據(jù)結(jié)構(gòu)中的“堆”。

普通變量和局部變量存放在棧里,指針變量存放在堆里。

  1. 全局(靜態(tài))存儲區(qū)、全局區(qū):分為DATA段和BSS段。DATA段(全局初始化區(qū))存放初始化的全局變量和靜態(tài)變量;BSS段(全局未初始化區(qū))存放未初始化的全局變量和靜態(tài)變量。還存放了常量(字符串常量、其他常量等)。程序運(yùn)行結(jié)束時自動釋放。其中BBS段在程序執(zhí)行之前會被系統(tǒng)自動清0,所以未初始化的全局變量和靜態(tài)變量在程序執(zhí)行之前已經(jīng)為0。
  2. 程序代碼區(qū)、代碼區(qū):存放程序的二進(jìn)制代碼。

顯然,C/C++語言中的全局變量和局部變量在內(nèi)存中是有區(qū)別的。C/C++語言中的全局變量包括外部變量和靜態(tài)變量,均是保存在全局存儲區(qū)中,占用永久性的存儲單元;局部變量,即自動變量,保存在棧中,只有在所在函數(shù)被調(diào)用時才由系統(tǒng)動態(tài)在棧中分配臨時性的存儲單元。

全局變量和靜態(tài)變量,c++,數(shù)據(jù)結(jié)構(gòu),c語言文章來源地址http://www.zghlxwxcb.cn/news/detail-735716.html

到了這里,關(guān)于全局變量、局部變量和靜態(tài)變量的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C語言趣味教程】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    【C語言趣味教程】(6) 作用域:局部變量 | 全局變量 | 局部變量優(yōu)先原則 | 利用大括號限制作用域 | 變量的生命周期

    ??? ?? 【C語言趣味教程】專欄介紹?? 猛戳了解?。?! 0x00 引入:什么是作用域? 變量和常量在程序中都是有作用范圍的,這個范圍我們稱之為變量的? 作用域 (scope) 。 作用域也稱為 \\\"定義域\\\",是程序中 定義的變量所存在的區(qū)域,出了該區(qū)域變量就不能被訪問。 變量的作

    2024年02月14日
    瀏覽(30)
  • 【C語言趣味教程】(4) 變量:代碼注釋 | 變量的聲明 | 初始化與賦值 | 作用域與生命周期 | 局部變量與全局變量

    【C語言趣味教程】(4) 變量:代碼注釋 | 變量的聲明 | 初始化與賦值 | 作用域與生命周期 | 局部變量與全局變量

    ? ?? 《C語言趣味教程》?? 猛戳訂閱!??! 0x00 引入:注釋的作用 \\\"程序員最討厭兩種人:一種是不寫注釋的人,一種是讓我寫注釋的人。\\\" 相信大家對注釋早已有所耳聞,對于注釋,C 語言有兩種注釋風(fēng)格,我們下面會逐個講解。 ? 但在這之前,我們先來了解了解注釋的作

    2024年02月15日
    瀏覽(27)
  • 『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑦ - 靜態(tài)順序表詳解(附完整源碼)

    『初階數(shù)據(jù)結(jié)構(gòu) ? C語言』⑦ - 靜態(tài)順序表詳解(附完整源碼)

    本章內(nèi)容 1.什么是線性表 2.什么是順序表? 3.靜態(tài)順序表結(jié)構(gòu)的定義 4.靜態(tài)順序表的函數(shù)接口實(shí)現(xiàn) 5.靜態(tài)順序表的問題及思考 ? ? 線性表(linear list)是n個具有相同特性的數(shù)據(jù)元素的有限序列。 線性表是一種在實(shí)際中廣泛使用的數(shù)據(jù)結(jié)構(gòu),常見的線性表:順序表、鏈表、棧、

    2024年02月15日
    瀏覽(28)
  • C語言自定義數(shù)據(jù)類型(一)定義和使用結(jié)構(gòu)體變量

    C語言自定義數(shù)據(jù)類型(一)定義和使用結(jié)構(gòu)體變量

    C 語言提供了一些由系統(tǒng)已定義好的數(shù)據(jù)類型,如:int,float,char? 等,用戶可以在程序中用它們定義變量,解決一般的問題。 但是人們要處理的問題往往比較復(fù)雜,只有系統(tǒng)提供的類型還不能滿足應(yīng)用的要求,C語言允許用戶根據(jù)需要自己建立一些數(shù)據(jù)類型,并用它來定義變

    2024年02月02日
    瀏覽(33)
  • Golang 局部變量、全局變量 聲明

    Golang 局部變量、全局變量 聲明

    四種聲明方式 + 多變量聲明: 全局變量的聲明和局部變量的聲明方式一、二、三 相同; 但是不能使用局部變量聲明方式四 (:=) 來聲明全局變量。

    2024年02月13日
    瀏覽(25)
  • Java成員變量(全局變量)和局部變量

    在Java中變量類型有 成員變量 、 局部變量 和 靜態(tài)變量(類變量、static變量) ,本篇文章主要介紹成員變量(全局變量)和局部變量的區(qū)別。 根據(jù)變量的作用范圍,將程序中的變量分為成員變量(全局變量)和局部變量。 一、成員變量(全局變量) 成員變量(全局變量):

    2024年02月04日
    瀏覽(35)
  • Python的全局變量、局部變量、類變量、實(shí)例變量介紹

    Python的全局變量、局部變量、類變量、實(shí)例變量介紹

    Python 的變量分類 全局變量:模塊內(nèi)、所有函數(shù)外、所有class外的變量; 局部變量:函數(shù)內(nèi)的變量,class的方法內(nèi)且不使用self.修飾的變量; 類變量:class內(nèi)且不在class的方法內(nèi); 實(shí)例變量:class的方法內(nèi)且使用self.修飾的變量。 對于面向過程程序設(shè)計涉及: 全局變量:模塊中

    2024年02月03日
    瀏覽(29)
  • Python全局變量和局部變量(超詳細(xì),純干貨,保姆級教學(xué))

    Python全局變量和局部變量(超詳細(xì),純干貨,保姆級教學(xué))

    ????????????????????????在函數(shù)外部定義的變量。所有函數(shù)內(nèi)部都可以使用這個變量。 ????????????????????????在函數(shù)內(nèi)部定義的變量。這個變量只能在定義這個變量的函數(shù)內(nèi)部使用。 定義看起來一愣一愣的,沒關(guān)系我也是。我將會用實(shí)例的方式為你

    2024年02月05日
    瀏覽(25)
  • Java中的全局變量和局部變量(看這篇就夠了)

    在Java中,全局變量和局部變量是兩種不同作用域的變量。 全局變量(成員變量) : 在類中定義的變量稱為成員變量,也叫全局變量。它們的作用域是整個類,在類的任何地方都可以被訪問。 如果沒有顯式地初始化,它們會有默認(rèn)值。 全局變量可以是基本數(shù)據(jù)類型(如int、

    2024年02月04日
    瀏覽(32)
  • Labview局部變量、全局變量、引用、屬性節(jié)點(diǎn)、調(diào)用節(jié)點(diǎn)用法理解及精講

    Labview局部變量、全局變量、引用、屬性節(jié)點(diǎn)、調(diào)用節(jié)點(diǎn)用法理解及精講

    寫本章前想起題主初學(xué)Labview時面對一個位移臺程序,傻傻搞不清局部變量和屬性節(jié)點(diǎn)值有什么區(qū)別,概念很模糊。所以更新這篇文章讓大家更具象和深刻的去理解這幾個概念,看完記得點(diǎn)贊加關(guān)注喔~ 本文程序源代碼附在后面,大家可以自行下載學(xué)習(xí)。 本文的結(jié)構(gòu)還是首先教

    2024年01月20日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包