實參量是區域性變數嗎 C語言 區域性變數與全域性變數

2021-10-17 02:22:31 字數 1863 閱讀 7806

1.形參與實參

c語言函式的引數會出現在兩個地方,分別是函式定義處和函式呼叫處,這兩個地方的引數是有區別的。

1.1形參(形式引數)

在函式定義**現的引數可以看做是乙個佔位符,它沒有資料,只能等到函式被呼叫時接收傳遞進來的資料,所以稱為形式引數,簡稱形參。

1.2實參(實際引數)

函式被呼叫時給出的引數包含了實實在在的資料,會被函式內部的**使用,所以稱為實際引數,簡稱實參。

1.3形參和實參的區別和聯絡

1) 形參變數只有在函式被呼叫時才會分配記憶體,呼叫結束後,立刻釋放記憶體,所以形參變數只有在函式內部有效,不能在函式外部使用。

2) 實參可以是常量、變數、表示式、函式等,無論實參是何種型別的資料,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參,所以應該提前用賦值、輸入等辦法使實參獲得確定值。

3) 實參和形參在數量上、型別上、順序上必須嚴格一致,否則會發生「型別不匹配」的錯誤。當然,如果能夠進行自動型別轉換,或者進行了強制型別轉換,那麼實參型別也可以不同於形參型別。

4) 函式呼叫中發生的資料傳遞是單向的,只能把實參的值傳遞給形參,而不能把形參的值反向地傳遞給實參;換句話說,一旦完成資料的傳遞,實參和形參就再也沒有瓜葛了,所以,在函式呼叫過程中,形參的值發生改變並不會影響實參。

2.區域性變數與全域性變數

2.1區域性變數

定義在函式內部的變數稱為區域性變數(local variable),它的作用域僅限於函式內部, 離開該函式後就是無效的,再使用就會報錯。

例如:int f1(int a)

float x,y; //全域性變數int func2()

int main(){

//todo: return 0;

注:1)a、b、x、y 都是在函式外部定義的全域性變數。c語言**是從前往後依次執行的,由於 x、y 定義在函式 func1() 之後,所以在 func1() 內無效;而 a、b 定義在源程式的開頭,所以在 func1()、func2() 和 main() 內都有效。

2)當全域性變數和區域性變數同名時,在區域性範圍內全域性變數被「遮蔽」,不再起作用。或者說,變數的使用遵循就近原則,如果在當前作用域中存在同名變數,就不會向更大的作用域中去尋找變數。

3.動態變數與靜態變數

3.1區別

定義或者宣告變數時,沒有static修飾符的就是動態變數,有static修飾符的就是靜態變數。

3.2靜態儲存與動態儲存

1)靜態儲存變數通常是在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束,靜態儲存只會初始化一次。靜態變數,全域性動態變數都是靜態儲存。

2)動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放。

3.3動態變數(簡稱變數)

全域性變數

1)在所有函式的外部定義(包括主函式),定義之後的所有函式都能使用,屬於靜態儲存。

2)作用域為整個專案,即最終編譯成可執行檔案的所有檔案中均可以使用動態全域性變數。外部檔案可以通過extern關鍵字來宣告另乙個檔案中存在的全域性變數。

3)無顯式初始化時預設初始化值為0。

區域性變數

1)在函式內部定義,屬於動態儲存,其他函式不能訪問,外部檔案也不能訪問。

2)無顯式初始化時預設初始化值為隨機值。

3.4靜態變數

靜態全域性變數

與動態全域性變數的主要不同:動態全域性變數可以通過extern關鍵字在外部檔案中使用,但靜態全域性變數不可以在外部檔案中使用。靜態全域性變數相當於限制了動態全域性變數的作用域。

靜態區域性變數

與動態區域性變數的主要不同:兩者作用域相同,都在函式內部,但是兩者生命週期不一樣,靜態區域性變數的生命週期是到程式的結束,而動態區域性變數的生命週期是函式的結束,靜態區域性變數的生命週期更長,同時靜態區域性變數只會初始化一次,函式重複呼叫,但靜態區域性變數不會被重新初始化。

區域性變數加上static之後依然是區域性變數

includeint count calls int main for int i 0 i 10 i static int b 0 b std cout count calls 之前看這個 有些疑問 1.函式重複呼叫了,那麼靜態變數是不是會重複定義或者變為賦值操作。這個問題的原理應該和編譯器還是預處...

對於區域性變數 LabVIEW小白入門 區域性變數

今天,加油鴨學習區域性變數,內容也是十分的簡單。區域性變數,顧名思義,就是在區域性使用的變數,類似c語言中的區域性變數。在不同的vi程式是不可以傳遞資料的。一大優勢就是省去了複雜的連線。與之對應的則是全域性變數,全域性變數可以在不同的vi程式間使用,下次我們講一下全域性變數。區域性變數的驗證思路 給...

C語言 返回區域性變數

一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 指標 的話,程式執行後會出錯。因為函式只是把指標複製後返回了,但是指標指向的內容已經被...