als C-Neuling Ich bin ein wenig verwirrt über zweidimensionale Arrays."Richtung" von zweidimensionalen Arrays in C
Wenn ich will, um eine Matrix von 3 Reihen und 5 Spalten darzustellen, ich denke, die richtige Erklärung ist:
char a[3][5];
Also, das ist ein Array von 3 Zeigern auf 5-Arrays von Zeichen, oder was?
Wie kommt es, wenn ich versuche, es wie folgt zu durchlaufen, scheint es die falschen Ergebnisse zu lesen?
int x, y;
for(x=0; x<3; x++){
for(y=0; y<3; y++){
printf("%c", a[x][y]);
}
}
Sind die folgenden äquivalenten und korrekten Möglichkeiten, es zu initialisieren?
char a[3][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
};
char a[3][5] = {1,0,0,0,1,
1,0,0,0,1,
1,0,0,0,1};
Vielen Dank für eine eventuelle bevorstehende Erklärung.
EDIT
Leider die Fehler, wird der Code nicht kopiert. Übrigens lasse ich sie weiterlesen, als ob sie vertikal gelesen würden, nicht in einer horizontalen.
Auch in dem Beispiel in diesem Tutorial http://www.cplusplus.com/doc/tutorial/arrays/ es liest das Array in einer Weise, die nicht streight-forward mir ist, wie es auf einem 5x3 zu funktionieren scheint, Höhe Breite, y x, cols Reihen Struktur statt a 3x5, Breite Höhe, x y. Reihen cols ein:
#define WIDTH 5
#define HEIGHT 3
int jimmy [HEIGHT][WIDTH];
int n,m;
int main()
{
for (n=0;n<HEIGHT;n++)
for (m=0;m<WIDTH;m++)
{
jimmy[n][m]=(n+1)*(m+1);
}
return 0;
}
Ihre verschachtelten Fors sollten y auf der inneren Schleife verwenden ... das könnte die falschen Ergebnisse erklären;] –
Ihre for-Schleifen sind falsch. – DevinB
Übrigens, beide Wege zur Initialisierung Ihres Arrays sind korrekt. Die zweite nutzt Klammer Elision - aber das ist natürlich erlaubt. Die erste verwendet ein nachkommendes Komma, aber es ist auch erlaubt. Persönlich mag ich eine Version mit Klammern und ohne Nachkomma am meisten - aber das ist nur mein Geschmack. –