之前寫過《j**a:全域性變數(成員變數)與區域性變數》(的文章,但由於附帶了許多j**a的知識,比如static關鍵字等對於初學者沒必要的贅述,這裡所以再寫一篇十分簡單明瞭的《全域性變數與區域性變數》(只涉及基本語言c語言)讓讀者快速入門與理解使用。
話不多說,直接乾貨 ↓
全域性變數是指在定義之後的所有程式段內都有效的變數(即定義在所有函式之前〉,例如下面這個例子:
#include int x; //main函式外定義的x
void change()
int main()
輸出結果:
11
在上述**中 ,把x定義在所有函式的前面, 這樣在 x定義之後的所有程式段都共用這個x, 所以當主函式對x賦值為10 之後, 使用change()函式可以改變x 的值, 從而令x 變為11
與全域性變數相對,區域性變數定義在函式內部,且只在函式內部生效,函式結束時區域性變數銷毀, 示例如下:
#include void change(int x)
int main()
輸出結果:
10
可以看到,當在主函式中定義了x 之後,將其作為change()函式的引數傳入,並令x加1,但是最後輸出時 x 卻仍然是10。這是因為change函式的引數x 為區域性變數 ,僅在函式內部生效, 通過change(x) 傳進去的 x 其實只是傳進去乙個副本(就理解成另外乙個世界的x就行 反正你別把它當原來x就行 只是它們的名字和所攜帶的值是一樣的 其實已經是兩個人了), 也即 change函式的引數x和main 函式裡的x其實是作用於兩個不同函式的不同變數(雖然 名字相同〉,取成不同的名字當然是可以的。這種傳遞引數的方式就叫做值傳遞(相當於我把我所攜帶的資訊內容複製給你一遍 而不是我把我給你【這一類稱為位址傳遞】),函式定義的小括號內的引數稱為形式引數或形參,而把實際呼叫時小括號內的引數稱為實際引數或實參。
因此, 如果想要讓定義的變數對所有函式都有用, 最好還是使用全域性變數的定義方式。
C 全域性變數與區域性變數
lession1.h extern bool a extern int b extern float c extern double d extern unsigned int e extern long f extern unsigned long g extern char h extern l...
全域性變數與區域性變數 C
區域性變數 作用域 函式內 包括形參 或 塊內 定義 函式內,包括形參,塊內 生命週期 從定義的那行開始分配記憶體,直至其所屬 塊內的最後一行結束或者return結束 儲存位置 儲存在棧中,當作用域結束後會自動釋放的區域性變數 注意 不同的作用域可以定義相同的區域性變數,否則不可.未初始化則預設值是...
c 全域性變數 區域性變數
全域性變數即在函式外宣告的變數,區域性變數即在函式內部宣告的變數,例如 include float num 3.14 乙個名為num的全域性變數 void main float num 2.45 乙個名為num的區域性變數 cout3.14 當區域性變數和全域性變數同名時,在區域性變數作用域內使用該...