Anfängerfrage: Länge von Zeilen in 2D-Arrays



  • Hallo zusammen,

    wie bekomme ich denn in einem 2-Dimensionalen Array die Länge der Zeilen?

    Im 1D Fall verwende ich sizeof(a)/sizeof(int) wenn a ein Int-Array ist.

    Im 2D Fall habe ich sowas versucht:
    int a[] = {{1,2},{2,3},{4,6,7}};
    printf("%d\t", sizeof(a[1])/sizeof(int));

    Aber es kommt das falsche Ergebnis raus. Wie geht es also wirklich?



  • Newbie001 schrieb:

    int a[] = {{1,2},{2,3},{4,6,7}};

    Das ist aber ein 1D-Array.

    int a[][3] = {{1,2},{2,3},{4,6,7}}; ist 2D
    Und dann kennst du ja die Länge.

    Die automatische Längenerkennung funktioniert nur in der obersten Ebene.



  • DirkB schrieb:

    Newbie001 schrieb:

    int a[] = {{1,2},{2,3},{4,6,7}};

    Das ist aber ein 1D-Array.

    int a[][3] = {{1,2},{2,3},{4,6,7}}; ist 2D
    Und dann kennst du ja die Länge.

    Die automatische Längenerkennung funktioniert nur in der obersten Ebene.

    Also verstehe ich es richtig: Anders als in Java, kann man also nicht unterschiedliche Längen erkennen?!



  • So wie du a deklariert hast steht im Speicher nur 1,2,4 hintereinander, das ist im C Standard so definiert.

    Wenn du mit unterschiedlichen Längen arbeiten will schau dir C99 an oder bastel dir eine Datenstruktur mit Speicherverwaltung per alloc etc. dazu

    Und vergisst nie die Sicherheit...nein Scherz das hat Zeit bis du erstmal die Geundlagen verstanden hast^^



  • Aha, der internium-Stümper hat wieder zugeschlagen.
    @Frager:
    Ignoriere diesen internium-Stümperschrott, ist alles falsch:
    - 1,2,4 stehen niemals hintereinander ist Speicher, weder bei deiner Initialisierung des Arrays noch bei der diesbezüglich korrekten (2D-DirkB)Variante
    - a wird nicht deklariert, sondern definiert, weil Speicher belegt (und explizit) initialisiert wird
    - C99 hat keine anderen "Längenbestimmungsmittel" für Arrays als C89
    - internium-Stümper hat die Grundlagen selbst nicht verstanden

    printf("%d\t", sizeof(a[1])/sizeof(int));
    

    Hierbei ist auch der Formatspezifizierer bei printf falsch, sizeof liefert immer den Typ size_t und für diesen gibt es erst ab C99 einen passenden, nicht jedoch deinen "%d"


Anmelden zum Antworten