C: struct array kopieren, warum so und nicht anders?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Gutschy, 24. Februar 2016 .

  1. 24. Februar 2016
    Hallo Leute,

    tippe gerade Codebeispiele ab und verstehe mal wieder etwas nicht. Also eigentlich verstehe ich einiges nicht, aber speziell geht es mit in der Funktion um 'struct_a z' und warum 'struct_a' einen Namen braucht und nicht irgendeinen Platzhalter haben darf. Hier der Code.
    Code:
    /* array11a.c */
    #include <stdio.h>
    #include <stdlib.h>
    
    struct array_a{ int wert[3]; };
    
    void output_array(struct array_a z) {
     int i;
    
     for(i = 0; i < sizeof(struct array_a) / sizeof(int); i++)
     printf("%d\t", z.wert[i]);
     printf("\n");
    }
    
    
    int main(void) {
     struct array_a new_array;
    
     new_array.wert[0] = 10;
     new_array.wert[1] = 20;
     new_array.wert[2] = 30;
    
     /* call-by-value */
     output_array(new_array); 
     return EXIT_SUCCESS;
    }
    
    
    Also, ich deklariere array_a als struct (um ein Array kopieren zu können, glaube ich) darin enthalten ist das Array 'wert'. Dann kopiere ich array_a zu new_array, trage dann Werte ein. Zum Schluss wird das Array an die Funktion übergeben.

    Und hier die Frage:
    In der Funktion wird wieder 'array_a' übergeben. Warum? 'struct' als Schlüsselwort verstehe ich ja aber ich finde es sollte doch auch 'struct arrray_b z' funktionieren, geht aber nicht. Ist 'new_array' überhaubt eine Kopie von 'array_a', ich habe mein Buch halt so verstanden. Aber es wird anscheinend auf die gleichen Speicheradressen vom Array 'wert' verwiesen, womit ich dieses Beispiel als sehr unnütz ansehe. Oder begreife ich es nicht.

    Gruss,

    gutschy
     
  2. 24. Februar 2016
    AW: C: struct array kopieren, warum so und nicht anders?

    Nope, nein. Mittels struct ist es dir quais möglich, einen neuen Datentypen zu definieren. Und dies tust du auch als erstes: Die Bezeichnung für deinen Datentypen lautet array_a und in den Klammern steht dann was diesen Datentypen "auszeichnet" (Im Objektorientierten Kontext spricht man dann von Attribut (Objekt) , jedoch nicht üblich in C).
    Deine Struktur enthält einen Integer-Array der Größe drei. Dieser ist nun Teil eines komplexeren Datentyps.
    Mit dieser Anweisung wird _KEIN_ Speicher reserviert. Es wird lediglich dem Compiler mitgeteilt, dass es nun den Datentyp struct array_a gibt, und wie dieser sich zusammensetzt.

    Auch nicht. Also zumindest ist "kopieren" hier nicht das passende Wort. An dieser Stelle legst du eine Variable "new_array" vom Typen "struct array_a" an. In C musst du das Schlüsselwort struct für die Variablendeklariation immer mitführen. Deshalb "struct array_s new_array" und nicht "array_a new_array", wie man es zb analog zu "int x" erwarten könnte. Umgangen wird dies oft mit typedef's.

    Wie oben schon erwähnt ist array_a keine Variable, sondern darf vielmehr als eigenständigen Datentypen aufgefasst werden.

    Anscheinend nicht ganz. Wenn du ein Buch hast lies dir das am besten nochmal durch.


    Wenn meine Ausführung soweit klar war, ist dir jetzt hoffentlich einleuchtend, was hier passiert. array_b ist in dem Kontext nicht als Variable, sondern als Datentyp zu verstehen. Da du diesen aber nirgends definiert hast, funktioniert dies folglich auch nicht. Und selbst wenn du ihn definierst, so wär er immer noch inkompatibel zu array_a und der Compiler würde dir spätestens beim Funktionsaufruf den Code um die Ohren hauen.
     
  3. 25. Februar 2016
    AW: C: struct array kopieren, warum so und nicht anders?

    xXSourceXx, vielen Dank für deine detaillierte Ausführung. Ja du hast recht, struct habe ich wirklich noch nicht begriffen weil es im Buch erst noch später behandelt wird, ich habe mich da wohl leider falsch ausgedrückt. Aber jetzt hast du mir einiges erklärt und bei der Verkettung von Attribut und Objekt ist dann der Groschen bei mir gefallen. Objektorientierung ist mir aus VB und Python ein Begriff.

    Noch mal vielen Dank für die Hilfe.

    gutschy
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.