靜態變數編譯階段
A. c語言中靜態變數和外部變數的初始化是在____階段完成的。
靜態變數是在編譯階段就完成初始化的。但這個外部變數有點。。有些確實是在編譯期完成的,但有些也不是啊。。
B. 什麼是靜態,什麼是動態
靜態就是在編譯階段就形成的,比方靜態欄位,在編譯前就需要賦值。
動態就是在運行階段才形成的,一般不加Static關鍵字的就是動態的,動態的可以等到運行時才賦值,比方動態欄位你可以等程序跑起來了才用cin輸入,靜態的一定要先賦值,而且靜態欄位的生命周期從程序開始到結束,動態欄位的生命周期有域的,比方在函數里定義的動態欄位,生命周期就是在這個函數里,函數調用結束,這個動態欄位就銷毀了。
C. c語言中靜態變數是怎麼用的
c語言中靜態變數作常量使用,用於存儲常數。可用const,constant或final等關鍵字標識,其值就會在編譯時設定,並且無法在運行時改變。編譯器通常將靜態常量與文本一起置於目標文件的文本區域,而非常量初始化數據則置於數據區;而如若有需要,有些編譯器還可選擇為其開辟專用區。
對於靜態全局變數來說,針對某一源文件的以static聲明的文件級變數與函數的作用域只限於文件內(只在文件內可見),也即「內部連接」,因而可以用來限定變數的作用域。
(3)靜態變數編譯階段擴展閱讀:
在函數內以static聲明的靜態局部變數雖然與自動局部變數的作用域相同(即作用域都只限於函數內),但存儲空間是以靜態分配而非默認的自動分配方式獲取的,因而存儲空間所在區域不同。
一般來說,靜態分配時存儲空間於編譯時在程序數據段分配,一次分配全程有效;而自動分配時存儲空間則是於調用棧上分配,只在調用時分配與釋放,且兩次調用間變數值始終保持一致;必須注意,靜態局部變數只能初始化一次,這是由編譯器來保證實現。
D. java中的全局變數和靜態變數是在編譯時分配內存還是在載入時分配內存
全局變數是在創建對象的時候分配內存的 創建對象過程為
分配空間。
遞歸的創建父類對象。
初始化成員變數。
調用構造方法創建一個對象。
靜態變數是在類載入的時候分配空間的,靜態變數和對象沒有關系 是在JVM第一次讀到一個類的時候載入信息的過程中分配空間的 載入過程為
1 .載入父類(如果父類已經載入過,則不在載入)。
2.初始化靜態屬性 。
3 .按順序的初始化靜態代碼塊 初始化的前提就是分配空間 。
而且靜態變數在以後的創建對象的時候不在初始化 所以一般用靜態來保存共享信息
E. C++中局部靜態變數是在什麼時刻產生(分配內存)在編譯時,還是等運行到該變數的首次出現時
局部static 變數在程序運行的時候分配空間了,只不過作用域是局部的,生存期和全局變數一樣到程序結束
F. 在C語言中,變數的初始化都是在編譯階段完成的.為什麼錯
char型相加,其實是將他的整形值相加,結果是一個整數,除非(char)強轉。
在局部范圍,局部變數是在棧中生存,而全局變數在靜態存取,所以是不同的變數,怎麼會相等。
關於char還有一個特殊的語言就是char *,它在C/C++中有專門的語義,既不同於signed char *,也不同於unsigned char *,專門用於指以'