您現在的位置是:首頁 > 足球

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

  • 由 峰哥linux程式設計學堂 發表于 足球
  • 2021-10-26
簡介switch(){ }還有函式的定義,例如:voidfunc(void){ }可以看到,這些語句中,使用大括號{}包含了一段程式碼塊,那麼,在程式碼塊中定義的變數,它的作用域就只有在程式碼塊內

區域性的是什麼意思

1 區域性變數、全域性變數

學習了函式的定義和使用之後,我們就會遇到這樣的一個問題:不同函式之間的變數是否能夠相互引用?例如,在func函式之間定義的變數A,是否可以在其他函式func1中引用?

如下是一個程式測試例子:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

編譯的結果如下:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

可以看到,編譯出錯,提示在main函式中使用的變數a沒有定義。那麼,變數a已經在func函式中定義了,為何不可以使用?

此時,我們就引出變數的兩大屬性:

作用域和生命週期

然後,我們再分析和總結

區域性變數、全域性變數、靜態變數

的作用域和生命週期;講解在不同的程式設計環境下,應該定義什麼型別的變數,才有利於程式的設計。

2 變數作用域

在日常生活中,我們出行時都會使用到“公交卡”,搭乘公交車的時候,刷卡扣錢就可以乘車。假設你是在深圳辦理的公交卡,可以在深圳搭乘公交車;但是,如果你去北京遊玩了,那麼,你在深圳辦理的公交卡在北京的公交車上就無法使用。

此時,我們就引出一個“

作用域

”的概念,就是說,我們在深圳辦理的公交卡,可以在深圳使用,到了北京,就無法使用。就是“跨地域”的問題,導致公交卡無法正常使用。所以,這就是“作用域”的限制。

同樣,在C語言中定義的變數,也有“作用域”的限制。程式測試例子如下:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

程式執行結果如下:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

可以看到,我們在if條件語句內定義了變數b,而且可以輸出變數b的內容。那麼,我們再對程式進行修改,在if語句後面,使用變數b,程式測試例子如下:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

編譯結果如下:

C語言的變數作用域,什麼是區域性變數?什麼是全域性變數?

可以看到,編譯程式錯誤,提示在main函式的第二次printf函式中,引用的變數b沒有定義。但是,我們已經在if條件語句內,定義了變數b,而且在if條件語句內可以使用,為何在條件語句if外面不可以使用?

此時,我們就引出了C語言變數的“作用域”概念。在C語言中,使用大括號{ }包含的程式碼塊,就是一段程式碼模組,那麼,在一段程式碼模組中定義的變數,它只能夠在該程式碼模組中使用,在程式碼模組外面,就無法使用程式碼模組內定義的變量了。在程式碼模組中定義的變數,它們的作用域就只有在程式碼塊內。

所以,在上面的例子中,if條件語句後面接著大括號{ }包含的一段程式碼塊,那麼,在大括號{ }程式碼塊中定義的變數b只能夠在該程式碼塊中使用,變數b的作用域就是在if條件語句後面的大括號{}程式碼塊內。出了程式碼塊外面,就無法使用變數b。

那麼,此時我們提到了大括號{}包含的一段程式碼,稱為:

程式碼塊

。在C語言中,有很多語句都可以定義程式碼塊,例如:

if

(){ }

if

(){ }

else

{ }

for

(){ }

while

() { }

do

{ }

while

();

switch

(){ }

還有函式的定義,例如:

void

func(

void

){ }

可以看到,這些語句中,使用大括號{}包含了一段程式碼塊,那麼,在程式碼塊中定義的變數,它的作用域就只有在程式碼塊內。我們經常遇到函式的定義,那麼,在函式內定義的變數,它的作用域就只有在函式內。

所以,本章節,我們學習了程式碼塊的定義,使用大括號可以定義一段程式碼塊。在程式碼塊內定義的變數,稱為:區域性變數,區域性變數的作用域,就只侷限在定義它的程式碼塊內。

Top