2016-05-27 152 views
0

的MWE是在聲明時初始化char數組?

#include <iostream> 
using namespace std; 

int main(void) 
{ 
    char array[255]; 
    cout << array[0] << "\n"; 
    cout << array[1] << "\n"; 
    cout << array[2] << "\n"; 
    cout << array[200] << "\n"; 
    cout << array[253] << "\n"; 
    cout << array[255] << "\n"; 
    return 0; 
} 

和輸出是

\330 
^M 
` 
\215 
^@ 
^@ 

雖然我不知道爲什麼輸出創建此。但是我可以說 「數組在聲明時被初始化。」?

+0

號這裏沒有初始化。 (因此,你的程序有未定義的行爲,或者可能未指定)。 –

+0

也許你的意思是char數組[256] = {0};' – Ultimater

+0

@ ultimater,不,只是char數組[255]; – yuxuan

回答

3

您的數組未初始化,所以它只是未定義的值。您可以首先初始化您的陣列:

char array[255] = {}; 

但這只是填充0。另外請注意,您無法訪問索引255位置:

cout << array[255] << "\n"; 

這將試圖訪問數組的元素第256,你只擁有255

+1

你可以用這種方式初始化數組,但是由於該數組沒有被其他任何東西填充,所以一串'\ 0'字符將被髮送到'cout'。 –

+1

是的,但至少行爲是明確的。 – zdan

0

C++中沒有隱式的初始化。 在你的情況下,編譯器只在棧上分配255個字節。實際內容是任意的。

+1

有隱含的初始化,只是沒有在這種特殊情況下。例如,如果此數組是在命名空間範圍內定義的,則它將被清零。 – Brian