C語言的變數的作用域和生存期

2021-07-07 04:52:01 字數 1209 閱讀 9286

c語言程式可以看成由一系列外部物件構成,這些外部物件可能是變數或函式。而內部變數是指定義在函式內部的函式引數及變數。外部變數定義在函式之外,因此可以在許多函式中使用。由於c語言不允許在乙個函式中定義其它函式,因此函式本身只能是「外部的」。

由於c語言**是以檔案為單位來組織的,在乙個源程式所有原始檔中,乙個外部變數或函式只能在某個檔案中定義一次,而其它檔案可以通過extern宣告來訪問它(定義外部變數或函式的原始檔中也可以包含對該外部變數的extern宣告)。

而static則可以限定變數或函式為靜態儲存。如果用static限定外部變數與函式,則可以將該物件的作用域限定為被編譯原始檔的剩餘部分。通過static限定外部物件,可以達到隱藏外部物件的目的。因而,static限定的變數或函式不會和同一程式中其它檔案中同名的相衝突。如果用static限定內部變數,則該變數從程式一開始就擁有記憶體,不會隨其所在函式的呼叫和退出而分配和消失。

c語言中使用靜態函式的好處

1. 靜態函式會被自動分配在乙個一直使用的儲存區,直到退出應用程式例項,避免了呼叫函式時壓棧出棧,速度快很多。 

2. 關鍵字「static」,譯成中文就是「靜態的」,所以內部函式又稱靜態函式。但此處「static」的含義不是指儲存方式,而是指對函式的作用域僅侷限於本檔案。 使用內部函式的好處是:不同的人編寫不同的函式時,不用擔心自己定義的函式,是否會與其它檔案中的函式同名,因為同名也沒有關係。 

c語言中static的語義

1.static變數:

1).區域性

a.靜態區域性變數在函式內定義,生存期為整個源程式,但作用域與自動變數相同,只能在定義該變數的函式內使用。退出該函式後, 儘管該變數還繼續存在,但不能使用它。

b.對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。

2).全域性

全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。但是他們的作用域,非靜態全域性 變數的作用域是整個源程式(多個原始檔可以共同使用); 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。

2.static函式(也叫內部函式)

只能被本檔案中的函式呼叫,而不能被同一程式其它檔案中的函式呼叫。區別於一般的非靜態函式(外部函式) 

static在c裡面可以用來修飾變數,也可以用來修飾函式。

C語言中變數的作用域和生存期

幾個基本概念 靜態儲存區 程式執行期間系統分配的固定的儲存空間。動態儲存區 程式執行期間根據需要進行動態分配的記憶體空間。靜態儲存區和動態儲存區都在記憶體中。作用域 變數可被使用的範圍。生存期 變數在程式執行過程中存留時間。全域性變數 外部變數 全域性變數全部存放在靜態儲存區 作用域從變數定義處開始...

C 中的生存期和作用域

生存期和作用域,究竟有什麼樣的關係呢?先解釋一下生存期吧。乙個程序對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為 棧 堆 bss段 資料段和 段。棧 存放程式臨時建立的區域性物件。一般vc 6.0生成的可執行檔案只有1mib多的棧。堆 存放程序執行中被動態分配的記憶體段...

c 變數的作用域 生存期和可見性

範圍 在乙個函式內部定義的變數,作用範圍只限於本函式體內。生存期 程式執行到本函式才會給區域性變數分配記憶體單元,函式執行完畢區域性變數所佔的儲存單元就被釋放 在函式體外部定義的變數是全域性變數,可以被本檔案所有其他函式訪問使用。作用域 所有檔案。在乙個cpp定義的全域性變數在另乙個cpp中使用,應...