struct und Zeiger
-
Hallo miteinander ich wollt eigendlich nur wissen wie die Syntax aussehen würde wenn ich auf *elem2 zugreifen und einen Wert zuweisen will
??var1.*elem2.elem1=4??
wenn das stimmt ginge auch:
var1.*elem2.elem2.*elem2.elem2.......??struct A;
struct B
{
int elem1;
struct A *elem2;
};struct A
{
int elem1;
struct B elem2;
};struct B var1;
-
NicNac schrieb:
Hallo miteinander ich wollt eigendlich nur wissen wie die Syntax aussehen würde wenn ich auf *elem2 zugreifen und einen Wert zuweisen will
??var1.*elem2.elem1=4??
wenn das stimmt ginge auch:
var1.*elem2.elem2.*elem2.elem2.......??struct A;
struct B
{
int elem1;
struct A *elem2;
};struct A
{
int elem1;
struct B elem2;
};struct B var1;
Nun ja, warum nicht schwer, wenn es auch einfach geht:
auf das elem1 der stuct B zuzugreifen ist trivial:
nur so zum Anschauen: var1.elem1=1;
jetzt wird es schon interessanter! Was ist den elem2 eigentlich?
Ein Zeiger, der sollte vorab wohl allociert werden:var1.elem2 = (struct A
malloc(sizeof(Struct A));
(mit casting ich steh halt drauf)und erst jetzt ist es überhaupt möglich auf igendwas zuzugreifen:
via:var1.elem2->elem2.elem1=4;
Ich hoffe das hilft weiter!
Wozu braucht man solche Konstuktionen überhaupt?
-
ja danke das hat mir schon geholfen. Um auf deine Frage zu beantworten:
ich bin grad dabei ein Buch über c zu lesen und bin dort auf diese Zeilen
geraten nun ja und ich wollt dann eben wissen wie man auf so ein Element zugreifen könnte.
Für was das aber gut sein kann weiß ich selbst nicht außer für Listen vielleict...trotzdem nochmals danke.
-
Da fällt mir direkt noch ne Frage ein und zwar wieso muss der Zeiger dortnda
allociert werden??
Und wieso kann man nicht einfach direkt auf ihn zugreifen? also so:
var1.elem2->elem2.elem1=4;
-
NicNac schrieb:
Da fällt mir direkt noch ne Frage ein und zwar wieso muss der Zeiger dortnda
allociert werden??
Und wieso kann man nicht einfach direkt auf ihn zugreifen? also so:
var1.elem2->elem2.elem1=4;Hallo,
probiers mal aus.
Das mindeste was du verlangen kannst, ist ein Speicherzugriffsfehler.
Da instruct B { int elem1; struct A *elem2; };
elem2 als zeiger auf die Structur A deklariert ist
und dieser Zeiger erstmal (ohne Definition) auf irgendwas zeigt, würdest du
auch mit**var1.elem2->elem2.elem1=4;
**die 4 irgendwohin schreiben.
Das lässt kein Betriebssystem gerne zu.
mit**
var1.elem2 = (struct A *) malloc(sizeof(struct A));
**
definiest du elem2 (weist also physisch Speicherplatz zu) und elem2
bekommt bei Erfolg eine gültigen Zeiger auf eben den genau für die Structur A
nötigen Speicherplatz.Ich kann dir nur empfehlen dich nochmal genau mit Zeigern und Vectoren zu
beschäftigen. 's sind halt die mächtigen Werkzeuge in C.