C語言中的局部變量為何只能在函數(shù)中使用?必須要初始化嗎?
網(wǎng)友解答: 局部變量為何只能在函數(shù)中使用? 不只是C語言, 就我所知的函數(shù)中的變量都是使用棧來保存的,棧結(jié)構(gòu)的特點是先進后出,當函數(shù)執(zhí)行結(jié)束返回后,其棧中所有數(shù)據(jù)均出棧,也就解釋了為什么
局部變量為何只能在函數(shù)中使用?
不只是C語言, 就我所知的函數(shù)中的變量都是使用棧來保存的,棧結(jié)構(gòu)的特點是先進后出,當函數(shù)執(zhí)行結(jié)束返回后,其棧中所有數(shù)據(jù)均出棧,也就解釋了為什么只能在函數(shù)中使用,因為函數(shù)執(zhí)行完畢后,所擁有的局部變量便不存在了。
遞歸、死循環(huán)等操作會發(fā)生溢出也是這個道理,因為不停的向棧中壓入數(shù)據(jù),當超出棧的大小時,便發(fā)生了溢出。
是否必須初始化C語言并沒有要求變量必須進行初始化操作,也就是說不進行初始化操作在編譯上是沒有錯的,但還是建議聲明變量時進行初始化。
因為聲明變量時,其實也就是申請了一小段內(nèi)存空間,變量所持有的就是該內(nèi)存空間的地址,而C語言并不提供變量的初始化操作,內(nèi)存空間之前很可能是被使用過的,聲明變量后,變量的值就是該內(nèi)存空間中存在的值, 而這個值是不確定的,很有可能會給后面的流程造成干擾。
所以,雖然并沒有硬性要求對變量進行初始化操作,但還是建議聲明變量時進行初始化。
網(wǎng)友解答:c中任何變量都有自己的作用域,變量只在自己的作用域內(nèi)生效。在函數(shù)體內(nèi)定義的變量只在該函數(shù)體內(nèi)有效。變量可以不初始化,這個時候編譯器賦給未初始化變量一個未定義的數(shù)值,這個數(shù)值隨機的,由編譯器決定,也可以理解為編譯器幫你給這個變量初始化了,只是初始化的值不確定,這時候這個數(shù)值也是不可用的、也就是不可以把這個變量賦值給其他變量或常量,因為這個值不確定。