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.
'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