C語言中變數的作用範圍

2021-06-21 12:17:03 字數 1095 閱讀 5278

從變數的作用域角度來分,可以分為區域性變數與全域性變數。

從變數值的存在的時間(即生存期)來分,可以分為靜態儲存方法和動態儲存方式。

所謂靜態儲存方式是指程式在執行期間由系統分配固定的村粗空間的方式。動態儲存方式則是在程式執行期間根據需要進行動態的分配儲存空間的方式。

記憶體供使用者使用的儲存空間的情況,這個儲存空間可以分為三部分:

(1)程式區   (2)靜態儲存區   (3)動態儲存區

資料分別存放在靜態儲存區和動態儲存區中。全域性變數全部存放在靜態儲存區中,在程式開始執行時,給全域性變數分配儲存區,程式執行完畢就釋放。在程式執行過程中它們佔據固定的儲存單元,而不是動態地進行分配和釋放。

在動態儲存區中存放一下資料:

(1)函式形式引數,在呼叫函式時給形參分配儲存空間。

(2)自動變數。未加static宣告的區域性變數。

(3)函式呼叫時的現場保護和返回位址等。

register宣告的變數不是存放在記憶體中,而是存在cpu的暫存器中,如果乙個變數用的頻繁就可以宣告乙個register變數。static宣告的變數只賦乙個初值,以後呼叫函式時不再賦初值而只是保留上次函式呼叫結束時的值。

外部變數,它的作用域是從變數的定義處開始的,到本程式檔案的末尾,在此作用域內,全域性變數可以為程式中各個函式的所引用,編譯時將外部變數分配到靜態儲存區。有時用extern來宣告外部變數,以擴充套件外部變數的作用域!即可以先用乙個未定義的變數,只要它在後面定義就好了!使用extern可以擴充套件它的作用。

如果用static宣告外部變數,則在其它檔案中用extern是無法使用到這個變數,這就是靜態外部變數,只限於本檔案使用,別的檔案是不能使用到得。而外部變數在其它檔案是可以使用到得。

作用域與生存期是不等的,乙個靜態區域性變數只能在函式內使用,但它的生存期卻是整個程式結束的時候銷毀的。

預設沒加extern的函式都是外部函式,加了static的函式則只能在本檔案中使用。

#define  s(a,b)   a*b

就是說把s(a,b)定義成a*b

int* p[4]代表的是指標陣列,陣列裡面的變數都是int型的指標。陣列p,然後型別為int*。

int (*p)[4]代表的是乙個二維陣列,*p指向的是乙個一維陣列,每個陣列有4個整形變數。

C語言變數的作用範圍

變數的作用範圍 1 區域性變數 1.1 舉例 1.1.1 形式引數 1.1.2 定義在函式體內的變數,也成為自動變數,由關鍵字auto說明,可以省略 1.1.3 定義在復合語句中的變數 1.2 定義在函式體內 1.3 使用棧的原理進行分配記憶體的 2 全域性變數 2.1 定義在函式體外 2.2 全域...

C語言中變數的作用域

在c語言中,每個變數都有不同的作用域。變數的作用域可以分為三種 全域性作用域 區域性作用域和塊內作用域。全域性作用域的變數叫全域性變數,全域性變數的生命週期是程式執行的自始至終。它對程式全域性具有可見性。擁有區域性作用域的變數叫做區域性變數,區域性變數的可見性僅限於區域性變數所在的函式模組。在函式語...

C語言中變數的作用域問題

c語言中有些變數可以在所有 檔案中使用,有些變數只能在當前的檔案中使用,有些變數只能在函式內部使用,有些變數只能在for 迴圈內部使用。include void main printf d n a 該 輸出為 2 1因此可以得知 變數的使用遵循就近原則,如果在當前的區域性作用域中找到了同名變數,就不...