Was bedeutet "->" in C?

T

Thomas_xp

Aktives Mitglied
Thread Starter
Dabei seit
05.04.2006
Beiträge
632
Reaktionspunkte
13
Was bedeutet das -> in C? Es ist ja irgendwie ein Pointer. Aber wie genau? Wäre **ptr nicht das Selbe?
 
Und was bedeutet das genau? Wie nutze ich den?
 
Zum Beispiel hier..... verkettete Listen...
_________
node insert_right(node list, int data){
node new_node = (node) malloc(sizeof(struct list_node));
new_node->data = data;
new_node->next = list->next;
list->next = new_node;
return new_node;
}
________________

Was macht das -> da genau?
 
Das ist eine Abkürzung für den Zugriff auf Komponenten einer struct-Variable. Ganz verständlich (für die Verhältnisse von C) erklärt in http://en.wikipedia.org/wiki/C_syntax

Statt
(*ptr_to_t).y

kann man schreiben
ptr_to_t->y

In deinem Beispiel ist new_node ein pointer auf eine Struktur vom Typ list_node.

Mit
new_node->next = list->next
wird der Komponente node von *new_node der Wert von der Komponente node von *list zugewiesen. Es ist das gleiche wie

(*new_node).next = (*list).next

P.S. ich hasse C, unter anderem aus diesem Grund.
 
Zuletzt bearbeitet:
Deine Datenstruktur "list_node" beinhaltet zwei Elemente/Eigenschaften:
1) list
2) data

nach
Code:
node new_node = (node) malloc(sizeof(struct list_node));

hast Du diese beiden Eigenschaften in new_node gekapselt.

Um nun Zugriff auf die beiden Eigenschaften zu bekommen, musst Du dereferenzieren, also

Code:
new_node->data
bzw.
new_node->list

Darf man eigentlich in diesem Zusammenhang schon von Klassen und Objekten sprechen? Wenn ja, dann wäre list_node der Name der Klasse, data und list sind die Eigenschaften und new_node wäre das Objekt.
 
Kleine Korrektur, es heißt nicht list und data, sondern next und data.

Klassen und Objekte sind etwas anderes. struct ist einfach ein zusammengesetzter Datentyp. Objekte enthalten nicht nur Daten, sondern auch Methoden (Funktionen).
 
Zurück
Oben Unten