2016-05-27 12 views
0

Die MWE istChar-Array zum Zeitpunkt der Deklaration initialisiert?

#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; 
} 

Und Ausgang ist

\330 
^M 
` 
\215 
^@ 
^@ 

Obwohl ich weiß nicht, warum die Ausgabe dies schafft. Aber kann ich sagen "Das Array wird zum Zeitpunkt der Deklaration initialisiert."?

+0

No. haben Es gibt keine Initialisierung hier. (Und als Ergebnis hat Ihr Programm undefiniertes Verhalten. Oder möglicherweise unspezifiziert.) –

+0

Vielleicht meintest du 'char-Array [256] = {0};' – Ultimater

+0

@ Ultimater, Nein, nur Char-Array [255]; – yuxuan

Antwort

3

Ihr Array ist nicht initialisiert, hat also nur undefinierte Werte. Sie könnten Ihr Array zuerst initialisieren:

char array[255] = {}; 

aber das füllt es nur mit den 0's. Beachten Sie auch, dass Sie nicht 255 Index hier zugreifen:

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

dies wird versuchen, das 256. Element des Arrays zuzugreifen und nur 255

+1

Sie könnten das Array auf diese Weise initialisieren, aber dann werden eine Menge '\ 0''-Zeichen an' cout' gesendet, da das Array nicht mit etwas anderem gefüllt wird. –

+1

Ja, aber zumindest ist das Verhalten wohldefiniert. – zdan

0

Es gibt keine implizite Initialisierung innerhalb von C++. In Ihrem Fall reserviert der Compiler einfach 255 Bytes auf dem Stack. Der tatsächliche Inhalt ist beliebig.

+1

Es gibt eine implizite Initialisierung, nur nicht in diesem speziellen Fall. Wenn dieses Array beispielsweise im Namespacebereich definiert wurde, wird es auf Null gesetzt. – Brian