靜態(tài)變量可以重新賦值嗎 C語(yǔ)言的問題,高手進(jìn)static在定義局部變量時(shí)是否只能賦值一次,再次定義時(shí)就沒用?
C語(yǔ)言的問題,高手進(jìn)static在定義局部變量時(shí)是否只能賦值一次,再次定義時(shí)就沒用?Static表示函數(shù)在第一次執(zhí)行變量時(shí)初始化變量,然后再次調(diào)用,它不會(huì)初始化變量并保留上次執(zhí)行的結(jié)果。首先在函數(shù)中聲
C語(yǔ)言的問題,高手進(jìn)static在定義局部變量時(shí)是否只能賦值一次,再次定義時(shí)就沒用?
Static表示函數(shù)在第一次執(zhí)行變量時(shí)初始化變量,然后再次調(diào)用,它不會(huì)初始化變量并保留上次執(zhí)行的結(jié)果。
首先在函數(shù)中聲明靜態(tài)int a=5,然后聲明int a=6。這不是重復(fù)的定義嗎?變量可以定義兩次嗎?定義static int之后,程序中的賦值是有用的,賦值將被保留,并且不會(huì)與函數(shù)return一起無效。變量的值是上一次調(diào)用的最后一個(gè)賦值結(jié)果,而不是初始定義的值
靜態(tài)變量的值可以更改。靜態(tài)變量、全局變量和全局靜態(tài)變量在Java中也稱為類變量。從名稱可以看出它屬于一個(gè)類,而不是一個(gè)類的實(shí)例。它的關(guān)鍵字是static,存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)中。當(dāng)程序被執(zhí)行并且類代碼被加載到內(nèi)存中時(shí),類的靜態(tài)變量分配屬于類的內(nèi)存空間。也就是說,每個(gè)實(shí)例對(duì)象都是一個(gè)靜態(tài)變量,只有在程序退出時(shí)才會(huì)釋放靜態(tài)變量的內(nèi)存空間。靜態(tài)變量直接通過類名訪問(Java也可以通過對(duì)象名訪問)。有人將其分為全局靜態(tài)變量和局部靜態(tài)變量,全局靜態(tài)變量失去了“全局”的普遍意義,本文對(duì)其范圍進(jìn)行了限定。靜態(tài)變量的聲明應(yīng)該出現(xiàn)在類中,而不是類的函數(shù)中。全局變量關(guān)鍵字global也是一種靜態(tài)存儲(chǔ)方法,它存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)域中。全局變量只需要在一個(gè)源文件中定義,就可以作用于所有源文件。當(dāng)然,其他不包含全局變量定義的源文件需要使用extern關(guān)鍵字再次聲明全局變量。全局變量和靜態(tài)變量的區(qū)別:全局變量在整個(gè)項(xiàng)目文件中有效;靜態(tài)全局變量只在定義它的文件中有效;靜態(tài)局部變量只在定義它的函數(shù)中有效,但程序只分配一次內(nèi)存,并且變量在函數(shù)返回后不會(huì)消失;局部變量在定義它的函數(shù)中是有效的,但在函數(shù)返回后它將是無效的。在描述全局變量(外部變量)之前,先形成靜態(tài)全局變量。全局變量本身是靜態(tài)存儲(chǔ)方法,靜態(tài)全局變量也是靜態(tài)存儲(chǔ)方法。兩者的存儲(chǔ)模式?jīng)]有區(qū)別。兩者的區(qū)別在于非靜態(tài)全局變量的作用域是整個(gè)源程序。當(dāng)源程序由多個(gè)源文件組成時(shí),非靜態(tài)全局變量在每個(gè)源文件中都是有效的。靜態(tài)全局變量限制了它的作用域,即它只在定義變量的源文件中有效,不能在同一源程序的其他源文件中使用。由于此函數(shù)的源代碼位于靜態(tài)文件的作用域中,因此可以避免此錯(cuò)誤。從上面的分析可以看出,把局部變量變成靜態(tài)變量會(huì)改變它的存儲(chǔ)方式,也就是改變它的生存期。將全局變量改為靜態(tài)變量后,其作用域發(fā)生變化,應(yīng)用范圍受到限制。所以靜態(tài)說明符的功能在不同的地方是不同的。要注意。變量有六個(gè)函數(shù):全局作用域、文件作用域、命名空間作用域、類作用域、局部作用域和語(yǔ)句作用域。
static靜態(tài)變量的值能改變嗎?
靜態(tài)int只初始化一次,但可以多次修改。靜態(tài)變量屬于靜態(tài)存儲(chǔ)模式。它的存儲(chǔ)空間是內(nèi)存中的靜態(tài)數(shù)據(jù)區(qū)。在程序運(yùn)行期間,此區(qū)域中的數(shù)據(jù)一直占用這些存儲(chǔ)空間。