> 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.)