區域性的int會初始化嗎

時間 2022-05-28 10:05:05

1樓:宛瑩

編譯器直接數寫入到棧裡,所以賦值和初始化是不可區分的。

比如下面的程式

int rt(void)

比如用 gcc -o rt.o rt.c -g -o0 -m32 編譯並連結,反彙編得到

int rt(void)

可以看到 i 的值直接寫入棧裡,和定義加初始化的效果一樣,不會出現問題。

而 j 有定義,無賦值,則操作 j 會得到一個未定義的值(與記憶體中 -0x8(%ebp) 的值有關)

m 定義與初始化放在一起,與 i 先定義後賦值的效果是一樣的。

2樓:種燒餅的怪叔叔

幾個概念搞清楚就可以了:

1)什麼是初始化,什麼是賦值,初始化就是在定義的時候直接附加一個值。比如 int i=3,在定義變數i是時候額外存入一個值,就好比你辦了銀行卡同時存入一定的錢。你問題那個就明顯是賦值,因為i已經存在了。

區別:對於在生產變數的時候就註明是常量的空間是不能賦值的,但是可以初始化,例如const int i=3;這個是合法的,但是後面如果再用i=5;賦值則非法。

2)在申請一個空間時候何時會自動初始化:變數分為動態變數和靜態變數。所有靜態的變數都會自動初始化為0,動態變數則不會。

如你問題中,i就是一個動態變數,所以不會被初始化。只有加上static int i;或者把i在所有函式之外定義,使他成為靜態變數,那麼就算不賦值他也會預設有值0.

3樓:匿名使用者

當然是賦值,因為這是2個獨立的語句,在傳值11的時候,i已經建立完成並可以使用了

4樓:

初始化和其它變數一樣,不過區域性變數在外部是不存在的

5樓:苦學程式設計的菜鳥

就是賦值啊

你指的初始化是什麼意思?

c語言問題 未初始化int變數的初值

c語言問題未初始化int變數的初值是設定錯誤造成的,解決方法為 1 首先我們開啟我們的編譯器,在main函式中寫。2 然後我們宣告定義變數的型別,比如int 整形 double 雙精度 float 浮點型 char 字元型 已 int整形為例。3 之後要有個空格。4 接下來寫我們的變數名,注意區分大...

java建構函式初始化的問題

class testperson public static void main string args 參考一下 紫風影殺 3行建構函式外面的age是類的成員變數,6行建構函式內的按格式建構函式的變數,是一個局域變數,8行輸出的是6行的那個age 9行輸出的是類的成員變數age,而類的成員變數ag...

DNF大叔改版能初始化SP點嗎

80 的可能 洗點的 樓上說的不可信,明顯就不是act1的版本過來的act1到現在.唯一一次送洗點,就是召喚大改,和格鬥大改.大改就是增加 普通技能,修改動作 什麼的.當時 tx也說過,有大改版 就會送洗點.樓上說的 出覺醒才送,你可以 看看.白手 修羅 鬼泣 元素.這些 職業,哪個覺醒改版 送過洗...