2011-05-04 243 views
2

如果我有:值未初始化

int array[20]; 

如果目前尚無初始化有什麼是array[0]價值?有沒有辦法檢查它是否已經初始化?

+0

相關是[閱讀未初始化的變量是未定義的行爲](http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991 #4259991),所以千萬不要考慮這樣做。 – GManNickG 2011-05-04 05:46:03

回答

14

「......假設我有...」你有它其中

如果你在命名空間範圍內有這樣的事情,那麼它是一個靜態存儲持續時間的對象,它始終是零初始化的。

如果你在本地範圍內有這樣的東西,那麼它就是一個自動存儲持續時間的對象,它根本沒有被初始化。 array[0]的值是不可預知的。不,沒有辦法判斷是否有人故意初始化。

+0

@Jake讓你自己變得簡單,並且總是這樣做'array [20] = {0};'。 – Dennis 2011-05-04 07:16:06

2

它基本上是垃圾或任何價值是在特定的記憶點。您無法檢測它是否已被初始化。

0

它將處於所謂的不確定狀態,在大多數實現中意味着無論在該內存中何時內存被數組佔用 - 通常稱爲垃圾。

3

array [0]的值是多少?假設這裏沒有初始化什麼?

它取決於數組是在文件範圍內還是在函數範圍內定義的。在函數作用域中,數組元素將包含未指定的值,而在文件範圍中,它們將被初始化爲零。

+0

文件範圍會使它:static int array [20] – Pepe 2011-05-04 05:31:32

+0

@Peter R .:你究竟想說什麼? – AnT 2011-05-04 05:32:37

+0

@AndreyT只是試圖展示如何在文件範圍內聲明一個數組... – Pepe 2011-05-04 05:33:41

0

它是未定義的,取決於編譯器和發佈的風格:一些編譯器會在調試中填充一個模式,但不會在發佈時執行。 在任何情況下,依靠編譯器並試圖檢查它,而不是正確初始化是一種不好的做法,並可能導致您遇到重大問題。

0

有沒有辦法檢查它是否已經初始化?

有沒有必要檢查。除非你明確地初始化它,它保持未初始化。