2016-04-05 6 views
1

Arrays a und b sind in Ordnung, c sagt zu viele Initializer-Werte und d zuweisen -858993460 zu jedem Feld. Irgendwelche Kommentare und Hilfe werden geschätzt. Dies ist für eine Klasse, also würde ich gerne die Situation verstehen!Ich versuche, ein paar verschiedene mehrdimensionale Arrays einzurichten und kann nicht herausfinden, warum dies nicht funktioniert

int a[2][2] = { {1, 2}, {3, 4} }; 
int b[2][3] = { {9, 8}, {7, 6, 5} }; 
int c[3][2] = { { 4, 4, 4 },{ 7, 7 } }; 
int d[3][3] = { {1, 1, 1}, {1, 1, 1} }; 
+0

'int b [2] [3]' bedeutet "2 Arrays von 3 Ints" nicht "1 Array von 2 Ints gefolgt von 1 Array von 3 Ints". Sobald Sie das verstanden haben, sollten Sie in der Lage sein zu sehen, was falsch ist. Mehrdimensionale Arrays können keine Arrays unterschiedlicher Größe enthalten. Wenn Sie verschiedene Größen im selben Container benötigen, müssen Sie einen 'std :: vector >' oder eine flache Array- und manuelle Indexberechnung verwenden. – user657267

Antwort

1

Elemente des Arrays c haben Typ int[2]. Daher muss jedes Element des Arrays höchstens mit zwei Initialisierern initialisiert werden.

Statt

int c[3][2] = { { 4, 4, 4 },{ 7, 7 } }; 
       ^^^^^^^^^^^ 

Schreib zum Beispiel

int c[3][2] = { { 4, 4 },{ 7, 7 } }; 
       ^^^^^^^^ 

Array d korrekt initialisiert.

int d[3][3] = { {1, 1, 1}, {1, 1, 1} }; 

Die Initialisierung entspricht der folgenden

int d[3][3] = 
{ 
    {1, 1, 1}, 
    {1, 1, 1}, 
    {0, 0, 0} 
}; 

Es scheint, dass Sie einen falschen Wert erhalten, weil Sie einen falschen Index verwenden, wenn Sie das Array zugreifen.

Hier ist ein Demonstrationsprogramm in C++ geschrieben, das die Arrays zeigt.

#include <iostream> 

int main() 
{ 
    int a[2][2] = 
    { 
     { 1, 2 }, 
     { 3, 4 } 
    }; 
    int b[2][3] = 
    { 
     { 9, 8 }, 
     { 7, 6, 5 } 
    }; 
    int c[3][2] = 
    { 
     { 4, 4 }, 
     { 7, 7 } 
    }; 
    int d[3][3] = 
    { 
     { 1, 1, 1 }, 
     { 1, 1, 1 } 
    }; 

    for (const auto &row : a) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    for (const auto &row : b) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    for (const auto &row : c) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 

    for (const auto &row : d) 
    { 
     for (int x : row) std::cout << x << ' '; 
     std::cout << std::endl; 
    } 

    std::cout << std::endl; 
}  

Die Programmausgabe ist

1 2 
3 4 

9 8 0 
7 6 5 

4 4 
7 7 
0 0 

1 1 1 
1 1 1 
0 0 0 

Elemente der Arrays, die nicht explizit von Null implizit initialisiert wurden initialisiert wurden.

+0

Vielen Dank für Ihre Antwort so schnell. Das hat mir definitiv geholfen, es herauszufinden. Ich verstehe, was ich falsch gemacht habe. Danke noch einmal! – phillis

+0

@phillis Überhaupt nicht. Wir Anfänger sollten uns helfen :) –

Verwandte Themen