C語言中,全局變量與局部變量同名時,如何判斷

在寫C語言程序的時候,變量分為“全局變量”和“局部變量”。它們主要是“作用域”的不同,“全局變量”,作用域在整個C語言源文件之內;而“局部變量”,作用域在一對大括號內。

若是在同一個作用域內,定義兩個“重名”的變量時,程序會報錯。比如,如下程序,在程序編譯時,就會產生錯誤信息:

C語言中,全局變量與局部變量同名時,如何判斷

上述C語言代碼是錯誤的,在編譯時,產生的錯誤信息如下所示:

C語言中,全局變量與局部變量同名時,如何判斷

因為在第5行和第6行,在main函數之內,同時定義了兩個“同名”變量num,所以,程序在編譯的時候就會報錯。但是,如果將其中一個num變量,定義在main函數的外面,那麼就不會報錯了。如下圖所示程序:

C語言中,全局變量與局部變量同名時,如何判斷

上述C語言程序中,在第3行,定義了一個變量num,在第7行也定義了一個變量num,雖然這兩個變量的名字相同,都是“num”,但是,其中一個變量屬於“全局變量”,作用域在整個C語言源文件;另一個(第7行)定義的變量,屬於“局部變量”,作用域在main函數中,所以,它們是不衝突的,程序在編譯的時候,也不會報錯。最終,程序執行的結果,以“局部變量”的值為準,程序執行結果如下圖所示:

我們看到,最終,num的值,取的是第7行定義的變量的值。它屬於“局部變量”,這是一種“就近原則”。這種“就近原則”,除了C語言之外,其它一些代碼語言中,也會被體現到。比如在web開發的js代碼中,如果將變量寫在一個函數之內,另一個同名的變量,寫在函數之外,在這門語言裡,和C語言是一樣的,也是會有“作用域”的概念,同樣會有一個“就近原則”。所以,我們理解了C語言中變量作用域的“就近原則”,也有利於學習其它的一些編程語言。


分享到:


相關文章: