作用域(Scope):
變量的有效范圍
存儲類別:
靜態存儲方式:是指在程序運行期間分配固定的存儲空間的方式。
動態存儲方式:是在程序運行期間根據需要進行動態的分配存儲空間的方式。
局部變量
定義在函數內部的變量稱為局部變量(Local Variable)
作用域:
它的作用域僅限于函數內部,離開該函數后就是無效的,再使用就會報錯
幾點說明:
1) 形參變量、在函數體內定義的變量都是局部變量。實參給形參傳值的過程也就是給局部變量賦值的過程。
2) 可以在不同的函數中使用相同的變量名,它們表示不同的數據,分配不同的內存,互不干擾,也不會發生混淆。
3) 在語句塊中也可定義變量,它的作用域只限于當前語句塊。
存儲:
函數形式參數、自動變量(未加static聲明的局部變量)、函數調用實的現場保護和返回地址等數據,在函數開始調用時分配動態存儲空間,函數結束時釋放這些空間。對自動變量來說,如果不賦初值則它的值是一個不確定的值。
靜態局部變量屬于靜態存儲類別,在靜態存儲區內分配存儲單元。在程序整個運行期間都不釋放。靜態局部變量在編譯時賦初值,如果在定義局部變量時不賦初值的話,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量)。
全局變量
在所有函數外部定義的變量稱為全局變量(Global Variable)
作用域:
全局變量的作用域默認是整個程序。OC中,如果全局靜態變量在.h中聲明,則作用域是整個程序,如果在.m中聲明,則其作用域只在該類中。
存儲:
全局變量全部存放在靜態存儲區,在程序開始執行時給全局變量分配存儲區,程序行完畢就釋放。在程序執行過程中它們占據固定的存儲單元,而不會動態地進行分配和釋放;
在OC中,不能再.h文件中聲明全局變量,但是可以聲明全局靜態變量。
當全局變量和局部變量同名時,在局部范圍內全局變量被“屏蔽”,不再起作用。或者說,變量的使用遵循就近原則,如果在當前作用域中存在同名變量,就不會向更大的作用域中去尋找變量。