2013-07-23 94 views
2

我是C++新手。最近,我一直堅持使用C++特性的簡單代碼。如果您能指出究竟是什麼問題,我將非常感激。代碼,如下所示:我遇到了C++數組初始化的麻煩

// used to test function of fill 
#include<iostream> 
#include<algorithm> 
using namespace std; 
int main(){ 
    int val = 0; 
    int myarray[8]; 
    //fill(myarray,myarray+2,1); 
    for(;val < 8;++val){ 
     cout << myarray[val]; 
     cout << endl; 
     } 
} 

而且它已打印出:

-887974872 
32767 
4196400 
0 
0 
0 
4196000 
0 

的問題是我想的默認值陣列不用初始化(在這種情況下,其大小爲8)。將(0,0,0,0,0,0,0,0) 。但那裏似乎有些奇怪的數字。誰能告訴我發生了什麼,爲什麼?

+3

這應該總結爲什麼他們沒有歸零:http://chat.stackoverflow.com/transcript/message/10771489#10771489 – chris

+0

局部變量不是默認初始化的 – assem

+0

*我認爲沒有初始化的數組的默認值(在這種情況下,其大小爲8)將是(0,0,0,0,0,0,0,0)*。是什麼讓你假設? (我只是說,不要假設讓我們安全地玩遊戲,並堅持文檔所說的內容) –

回答

11

的元素是未初始化的,即,它們包含垃圾值。

如果你想數組元素初始化爲0,使用此:

int myarray[8] = {}; 
+0

非常感謝:) – nicknguyen128

+3

@ nicknguyen128,如果您接受他的回答,請點擊數字旁邊的複選標記。這給他一點名譽衝擊,它標誌着任何人找到你的問題並從中學習的答案。 –

+0

我做到了。謝謝 – nicknguyen128

1

初始值不保證是0

+0

我想補充一點,在某些MSVC編譯器上設置DEBUG標誌將包括它們的初始化值的調試運行時庫,但RELEASE運行時庫不會初始化它們。如果你不小心,它可能是挫折的根源。 –

+1

我經常希望調試庫會初始化爲隨機數而不是零,以避免這種情況 –

1

如果你想獲得一個數組有一個初始值,你可以這樣做:

int *arr = new int[8](); 
0
int myarray[8]; 

這是一個數組的簡單聲明,即你告訴編譯器「嘿!我將使用一個8位整數數組」。現在編譯器知道它存在,但它不包含任何值。它有垃圾值。

如果你打算初始化數組(自動),那麼你需要添加一個空白的初始化序列。

int myarray[8]={}; //this will do 

快樂編碼!