外部內部變數 作用域

2021-06-22 13:56:06 字數 1362 閱讀 1448

外部變數和內部變數

乙個c程式就是由乙個或多個「外部」物件構成的,它們可能是外部變數或函式。在函式外部定義的變數就叫做外部變數,在函式內部定義(也可以認為在塊內定義)的變數叫做內部變數。

函式本身一定是外部的

。c語言不允許將函式定義在函式內部,也就是說不可在函式內部再定義函式。

函式內部或塊內定義的內部變數則只能在函式內部使用。

注意:變數有內部和外部之分,而函式則沒有內部和外部之分,所有的函式都是外部函式。

因為外部變數是全域性訪問的,所以外部變數提供了一種在函式之間進行通訊的方法(函式之間還可以通過函式引數和返回值進行資料通訊)。在程式中,當函式間資訊交流頻繁,需要共享大量資料時,將這些共享資料設計為外部變數比通過函式引數傳遞傳出常常更方便。外部變數定義以後,任何函式都可以通過外部變數的名字訪問該外部變數,因此函式和函式之間就可以共享這些外部變數。

(c++中是通過乙個類把這些變數集合)

由於外部變數的作用域範圍較大,生命週期與程式執行時間相同,因此外部變數可用於記錄一些全域性性質的資料。當呼叫函式時內部變數才在記憶體中分配記憶體單元,它們才在記憶體中存在,當離開函式時它們就會消失,在記憶體中就不存在了。

變數的作用域規則

組成c程式的函式和外部變數並不需要同時全部編譯

。程式的原始檔可以儲存在多個檔案中,並且以前編譯過的程式還可以直接取出其obj檔案通過連線程式連線,然後裝載到記憶體執行。這實際上就是多個原始檔分別編譯的問題。

那麼如何才能實現分別編譯呢?應該如何安排外部變數定義語句,以便在編譯期間恰當的宣告它們呢?外部變數如何初始化?。。。

首先回憶一下變數作用域的含義--

變數的作用域就是變數起作用的程式範圍。

1.檔案範圍

。其作用域開始於檔案開頭,結束於檔案結尾。那些定義於本檔案的外部變數和函式具有檔案作用域。

具有檔案作用域的變數或函式如果在定義時使用了static儲存屬性限定詞,那麼該變數或函式的作用域將限定在本檔案以內;如果在定義外部變數或函式時沒有使用static限定詞,那麼其作用域還可以通過extern宣告語句擴充套件到其他檔案。

2.塊範圍。開始於左大括號「{」,結束於右大括號「}」。在塊內定義的內部變數其作用域就在塊範圍內,包括函式引數。

3.函式原型範圍。在函式原型中定義的變數只在函式原型內有效,開始於原型左括號,結束於原形右括號。

4.函式範圍。開始於函式體的左大括號「{」,結束於函式體的右大括號「}」。函式範圍只適用於標籤,標籤只可以作為goto語句的目標,標籤只能在同一函式內起作用。

在組成程式的所有檔案中,

外部變數的定義只能有乙個

。在其他檔案區域或本檔案該外部變數定義以前的區域,可以通過extern宣告該外部變數,宣告以後這些區域也可以訪問該外部變數。

外部變數與作用域

include define maxline 1000 int max char line maxline char longest maxline int getline void void copy void 列印最長的行,特別版本 main if max 0 存在這樣的行 printf s l...

作用域,變數作用域,作用域鏈知識

第2章 變數作用域 第3章 作用域鏈 預覽 1.全域性作用域 整個script標籤下 或者是單獨的js檔案 外部js 2.區域性作用域也叫 函式作用域 在函式內部就是區域性作用域 這個 的名字 變數 只在函式內部起作用和效果 3.不同作用域下,定義相同變數名是不衝突的。如果是在同一作用域宣告2個相同...

變數作用域

python任何變數都有其特定的作用域 在函式內部的變數一般只能在函式內部使用,這些只能在程式特定的區域使用的變數稱為區域性變數.在乙個檔案頂部,在函式的外部定義的變數,可以供該檔案的任何函式呼叫,這樣的變數稱為全域性變數 區域性變數和全域性變數的關係 區域性變數可以通過global關鍵字強制宣告為...