C++: immer die Zeile die Größe eines mehrdimensionalen Arrays an eine Funktion übergeben

Ich versuche, eine Funktion schreiben, die druckt den Inhalt eines mehrdimensionalen Arrays. Ich weiß, die Größe der Spalten, jedoch nicht die Größe der Zeilen.

EDIT: Da ich nicht klar machen werden die arrays, die an diese Funktion übergeben werden NICHT dynamisch zugeteilt. Die Größen sind zur Kompilierzeit bekannt ist.

Teste ich es mit einem 3x2 Arrays. Hier ist die Funktion so wie es da steht:

void printArrays(int array1[][2], int array2[][2]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "\narray1[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array1[i][j]
                 << "\tarray2[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array2[i][j];
        }
    }
}

Offensichtlich funktioniert dies nur, wenn ich weiß, die Größe von "i" ist 3 (es ist in diesem Fall). Ideal, jedoch möchte ich die Funktion zu arbeiten, egal, was die Größe der ersten dimension.

Ich dachte, ich wäre in der Lage, dies zu tun mit der sizeof () - Funktion, z.B.

int size = sizeof(array1);

... und tun Sie etwas Mathematik aus.

Hier ist der ungerade Teil. Wenn ich den sizeof () - Funktion in das array, gibt es einen Wert von 4. Ich kann verwenden Sie Zeiger-notation auf die array-Dereferenzierung:

int size = sizeof(*array1);

... aber das wirklich gibt einen Wert von 8. Dies ist merkwürdig, da die Gesamt Größe sollte Zeilen(die = 3) * Spalten(= 2) * sizeof(int), (= 4), oder 24. Und in der Tat, dies ist das Ergebnis, wenn ich sizeof(*array1) außerhalb der Funktion.

Weiß jemand, was ist hier Los? Noch wichtiger ist, hat jemand eine Lösung?

InformationsquelleAutor Karl Giesing | 2011-08-04
Schreibe einen Kommentar