Vollständige Version anzeigen : C: struct array kopieren, warum so und nicht anders?


Gutschy
24.02.2016, 06:52

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.

/* 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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
xXsoureXx
24.02.2016, 22:08

Also, ich deklariere array_a als struct (um ein Array kopieren zu können, glaube ich) darin enthalten ist das Array 'wert';[.;]

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.

Dann kopiere ich array_a zu new_array, trage dann Werte ein. Zum Schluss wird das Array an die Funktion übergeben. [.;]
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.

Und hier die Frage:
In der Funktion wird wieder 'array_a' übergeben;[.;]


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

'struct' als Schlüsselwort verstehe ich[.;]
Anscheinend nicht ganz. Wenn du ein Buch hast lies dir das am besten nochmal durch.


ich finde es sollte doch auch 'struct arrray_b z' funktionieren, geht aber nicht;[.;]

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.


Gutschy
25.02.2016, 04:21

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


Ähnliche Themen zu C: struct array kopieren, warum so und nicht anders?
  • Prototype - Element wo anders hin kopieren (verschieben)
    Hi, das DIV soll von unten nach oben kopiert/verschoben werden. So funktioniert es derzeit nicht // put li images to the top and remove at the bottom $$('div;liImages');each(function (item) ); } }); <div id="slider"> <!-- Hier hoch soll jeweils geschoben werden und unten gelösc [...]

  • iTunes: Bilder sync/kopieren auf iPhone: warum nicht im DCIM Ordner enthalten?
    Hi, ich habe heute ein vom Iphone geschossenes Foto vom DCIM Ordner auf den PC kopiert und anschließend aus dem Iphone gelöscht. Jedoch brauchte ich das Foto doch noch, und habe also mittels Itunes wieder auf das Iphone synchronisieren lassen und es war wieder im Iphone. Aber kann mir eve [...]

  • [C/C++] Frage zu struct / array
    Hi, bin mal wieder fleißig am c lernen und mitlerweile bei strukturen und arrays angekommen. folgdende frage hab ich nun: struct oz ; struct oz actor[4] = ; wofür steht die 30 hinter char actor[30]? und wofür die 4 bei struct oz actor[4] könnte bei struct oz actor[4] auch struct oz ac [...]

  • [C/C++] Zugriff auf struct array in struct
    Ich arbeite mit Visual Studio 2010 und schreibe in C und stehe vor folgendem Problem: typedef struct Struct1; typedef struct Struct2; [..;] Struct2 myStruct; //Werte initialisiere etc [..;] printf("Meinwert: %i",myStruct;Struct1Array[0];iWert); An dieser Stelle bekomme ich den Fehle [...]



raid-rush.ws | Imprint & Contact pr