linux shell全域性變數與本地變數
變數釋放
全域性變數
程式內所有函式可以直接呼叫的變數,對所有函式都是可見的,程式執行完成後釋放變數所佔記憶體。
區域性變數
相對於全域性變數,作用域僅在某個函式中,當函式執行完成釋放記憶體。
**全域性變數定義:**在函式外定義變數,若沒有初始化則預設0值。
**本地(區域性)變數定義:**在函式內定義,若沒有初始化不知道會是啥。
靜態本地變數
在本地變數定義時加上static修飾符就成為靜態本地變數
#include int f(void);
int gall = 7; //全域性變數
返回本地變數的位址是危險的:本地變數的位址在函式執行結束後釋放,所以位址可以被重新分配和修改;
返回全域性變數或靜態本地變數的位址是安全的;
返回在函式內malloc的記憶體是安全的,但是容易造成問題;
最好的做法是返回傳入的指標;
盡量避免使用全域性變數,使用全域性變數或者靜態本地變數的函式是執行緒不安全的。
全域性變數
export關鍵字進行定義,export可以省略,但是一般為了讀取方便建議還是規範定義格式。
本地變數
local關鍵字進行定義,不侷限於定義的位置。
**全域性變數作用域:**指令碼內在定義位置後的所有函式。
**區域性變數作用域:**函式及函式內引用的其他函式,作用域比c語言的廣。如下的f3中
為了方便區分,shell中一般約定全域性變數使用大寫英文進行定義,本地變數使用英文小寫定義。
例
注意:shell指令碼是按照程式的編寫循序一條一條執行的,比如執行f1之前並沒有定義string,所以即使f2裡面定義string的關鍵字換成export,在f1中string也是空的。
linux shell
unset 變數名
比如unset num會釋放num變數。
c語言
區域性變數vs全域性變數,區域性變數打斷全域性變數的傳遞!
全域性變數global variable 全域性變數會降低程式可讀性!全域性變數作用範圍 定義始至檔案尾 全域性變數與區域性變數同名,則在區域性變數的作用範圍內,全域性變數被遮蔽。全域性變數增加了程式的耦合度,如果乙個全域性變數可以被多個 要限制使用全域性變數 區域性變數local variable...
static全域性變數 全域性變數
1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...
本地變數 全域性變數 型別推斷var
與c 不同,c 在型別的外部不能宣告全域性變數,所有欄位都屬於型別,而且必須在型別宣告內部宣告,同理也沒有全域性函式,c 中方法沒有預設返回型別,所有方法必須包含返回型別或void。在c 中,可以宣告乙個本地變數,然後在巢狀塊中宣告另乙個相同名稱的本地變數,在內部範圍,內部名稱掩蓋了外部名稱,然而在...