1. 程式人生 > >外部內部變數 作用域

外部內部變數 作用域

外部變數和內部變數 一個C程式就是由一個或多個“外部”物件構成的,它們可能是外部變數或函式。在函式外部定義的變數就叫做外部變數,在函式內部定義(也可以認為在塊內定義)的變數叫做內部變數。 函式本身一定是外部的。C語言不允許將函式定義在函式內部,也就是說不可在函式內部再定義函式。函式內部或塊內定義的內部變數則只能在函式內部使用。 注意:變數有內部和外部之分,而函式則沒有內部和外部之分,所有的函式都是外部函式。 因為外部變數是全域性訪問的,所以外部變數提供了一種在函式之間進行通訊的方法(函式之間還可以通過函式引數和返回值進行資料通訊)。在程式中,當函式間資訊交流頻繁,需要共享大量資料時,將這些共享資料設計為外部變數比通過函式引數傳遞傳出常常更方便。外部變數定義以後,任何函式都可以通過外部變數的名字訪問該外部變數,因此函式和函式之間就可以共享這些外部變數。
(c++中是通過一個類把這些變數集合) 由於外部變數的作用域範圍較大,生命週期與程式執行時間相同,因此外部變數可用於記錄一些全域性性質的資料。當呼叫函式時內部變數才在記憶體中分配記憶體單元,它們才在記憶體中存在,當離開函式時它們就會消失,在記憶體中就不存在了。 變數的作用域規則 組成C程式的函式和外部變數並不需要同時全部編譯。程式的原始檔可以儲存在多個檔案中,並且以前編譯過的程式還可以直接取出其obj檔案通過連線程式連線,然後裝載到記憶體執行。這實際上就是多個原始檔分別編譯的問題。 那麼如何才能實現分別編譯呢?應該如何安排外部變數定義語句,以便在編譯期間恰當的宣告它們呢?外部變數如何初始化?。。。 首先回憶一下變數作用域的含義--
變數的作用域就是變數起作用的程式範圍 1.檔案範圍。其作用域開始於檔案開頭,結束於檔案結尾。那些定義於本檔案的外部變數和函式具有檔案作用域。具有檔案作用域的變數或函式如果在定義時使用了static儲存屬性限定詞,那麼該變數或函式的作用域將限定在本檔案以內;如果在定義外部變數或函式時沒有使用static限定詞,那麼其作用域還可以通過extern宣告語句擴充套件到其他檔案。 2.塊範圍。開始於左大括號“{”,結束於右大括號“}”。在塊內定義的內部變數其作用域就在塊範圍內,包括函式引數。 3.函式原型範圍。在函式原型中定義的變數只在函式原型內有效,開始於原型左括號,結束於原形右括號。 4.函式範圍。開始於函式體的左大括號“{”,結束於函式體的右大括號“}”。函式範圍只適用於標籤,標籤只可以作為goto語句的目標,標籤只能在同一函式內起作用。
在組成程式的所有檔案中,
外部變數的定義只能有一個。在其他檔案區域或本檔案該外部變數定義以前的區域,可以通過extern宣告該外部變數,宣告以後這些區域也可以訪問該外部變數。