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