c語言局部變量和全局變量的區(qū)別 C語言全局變量和局部變量會(huì)沖突嗎?為什么?
C語言全局變量和局部變量會(huì)沖突嗎?為什么?在C語言中,這取決于如何放置全局變量和局部變量。如果將全局變量和局部變量放在一個(gè)代碼文件中,則會(huì)發(fā)生沖突。所以不明顯,我將編寫一個(gè)C程序代碼,如下圖所示:在這
C語言全局變量和局部變量會(huì)沖突嗎?為什么?
在C語言中,這取決于如何放置全局變量和局部變量。如果將全局變量和局部變量放在一個(gè)代碼文件中,則會(huì)發(fā)生沖突。所以不明顯,我將編寫一個(gè)C程序代碼,如下圖所示:
在這個(gè)C程序中,我在main函數(shù)外定義了一個(gè)全局變量para,并給出一個(gè)初始值1。在C程序的主函數(shù)中,我定義了一個(gè)變量para,它與主函數(shù)外的變量同名。
這里,C程序主函數(shù)外的變量的生命周期在整個(gè)代碼中是有效的,而主函數(shù)的變量只在主函數(shù)中有效。
也就是說,當(dāng)您在C程序的主函數(shù)中操作para變量時(shí),實(shí)際上是在主函數(shù)中操作變量,而外部para變量的值仍然是1。在這個(gè)C程序中,main函數(shù)中的para變量隱藏了外部變量para。
因此,學(xué)生在學(xué)習(xí)C語言時(shí),必須注意全局變量被同名局部變量覆蓋的問題,還要了解變量的范圍和生命周期。
C語言,全局變量和局部變量有什么區(qū)別?
(1)靜態(tài)局部變量在函數(shù)中定義,但與自動(dòng)變量不同,它們?cè)谡{(diào)用時(shí)存在,在退出函數(shù)時(shí)消失。靜態(tài)局部變量總是存在的,也就是說,它的生命周期就是整個(gè)源程序。(2) 雖然靜態(tài)局部變量的生存期是整個(gè)源程序,但它的作用域仍然與自動(dòng)變量的作用域相同,即只能用于定義變量的函數(shù)中。退出函數(shù)后,雖然變量繼續(xù)存在,但不能使用。(3) 對(duì)于基本類型的靜態(tài)局部變量,如果初始值未賦值,系統(tǒng)將自動(dòng)賦值為0。如果自動(dòng)變量沒有給定初始值,則其值是不確定的。根據(jù)靜態(tài)局部變量的特點(diǎn),可以看出它是一種以整個(gè)源文件為生命周期的量。雖然在離開定義它的函數(shù)后不能使用它,但是如果再次調(diào)用定義它的函數(shù),并且保存上次調(diào)用后留下的值,則可以繼續(xù)使用它。因此,當(dāng)一個(gè)函數(shù)被多次調(diào)用并且在調(diào)用之間需要保留一些變量的值時(shí),可以考慮靜態(tài)局部變量。雖然使用全局變量也可以達(dá)到上述目的,但全局變量有時(shí)會(huì)產(chǎn)生意想不到的副作用(特別是短全局變量的污染),因此使用局部靜態(tài)變量仍然是合適的。總之,靜態(tài)局部變量和全局變量最明顯的區(qū)別是全局變量的所有函數(shù)定義后都可以使用,而靜態(tài)局部變量只能在一個(gè)函數(shù)中使用。