Hallo habe eine Frage wie überträgt amn aus einem struct ein Array auf eine Variablen array der selben größe? struct {int eins; int zwei; int drei[50]; }zahlen; int ziffer_drei[50]; Also ich möchte gerne den Inhalt von drei der Variablen ziffer_drei zuweisen! Danke für eure Antworten.
In einer Schleife kopiert man die Werte des einen Feldes in das andere. for(i=0;i<50;i++) ziffer_drei[i] = zahlen.drei[i]; Interessant wird es, wenn man keine Kopie, sondern mit einer Referenz (Pointer) arbeitet...
Ich benutze einen Zeiger auf die unterschiedlichen structs! Also da gibt es mehrere von ist das ein problem?
Sagen wir es so: Willst du eine Kopie des Array anlegen oder dessen Werte "nur" ausgeben?
>Ich möchte eine Kopie des struct array's anlegen
Nimm die "for-Schleife" (oder heissen die inzwischen
"for-Abfragen"?)
Und das geht auch wenn ich mit einem zeiger arbeite? brauche glaub ich ein wenig Bespielcode! MfG Markus
"zahlen->drei" ist natürlich verkehrt. Anstatt "zahlen" muss der Name Deines Pointers stehen.
> Und das geht auch wenn ich mit einem zeiger arbeite?
Das eine hat mit dem anderen nichts zu tun.
Wenn du eine struct hast:
struct MeineZahlen {
int eins;
int zwei;
int drei[50];
};
und eine Variable von diesem Datentyp ...
struct MeineZahlen zahlen;
... dann greift man mit der '.' Syntax auf die Elemente von zahlen
zu:
zahlen.eins = 1;
zahlen.zwei = 2;
Hat man aber einen Pointer auf so eine Struktur ...
struct MeineZahlen * ptrZahlen;
(ptrZahlen zeigt natürlich tatsächlich auf so eine Struktur)
... dann muss man den Pointer dereferenzieren um an die struct
zu kommen und von dort ein Element auszuwerten:
(*ptrZahlen).eins = 1;
(*ptrZahlen).zwei = 2;
die Klammern sind absolut notwendig, da die Operatorenprioritaeten
sondt für eine falsche Interpretation sorgen würden.
Da dieses
(*ptrZahlen).eins = 1;
aber eine blöde Schreiberei ist, hat man genau für dieses eine
eigene Schreibweise eingeführt, damit man da nicht künstlich
Klammern schreiben muss:
ptrZahlen->eins = 1;
Das Prinzip ist:
Pointer->
liefert dir das worauf der Pointer zeigt im Falle einer Struktur.
Und nach dem -> schreibst du dann die Komponente der Struktur
mit der du arbeiten möchtest. Ob das jetzt ein int ist oder
ein Array von int, oder ein string spielt für das Aufsuchen
der Komponente keine Rolle. Erst dann wenn du die Komponente hast
ptrZahlen->drei
bestimmt die Komponente was man mit ihr anstellen kann. Das hat
aber nichts mit dem Aufsuchweg zu tun, bis man bei der Komponente
angelangt ist.
ptrZahlen->drei
ist ein Array. Und Arrays kann man in C nicht direkt zuweisen,
sondern man muss das machen was man mit jedem Array machen
muss: Die Array-Elemente einzeln umkopieren oder einen memcpy
benutzen, der auch nichts anderes macht als in einer Schleife
umzukopieren. Nur arbeitet halt ein memcpy auf Byte-Ebene
während einer for-Schleife halt auf der Ebene des Datentyps im
Array angesiedelt wird (bei einem int-Array werden int kopiert,
bei einem double Array werden double kopiert, etc.)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.