Was bedeutet "->" in C?

Thomas_xp

Mitglied
Thread Starter
Mitglied seit
05.04.2006
Beiträge
632
Was bedeutet das -> in C? Es ist ja irgendwie ein Pointer. Aber wie genau? Wäre **ptr nicht das Selbe?
 

Thomas_xp

Mitglied
Thread Starter
Mitglied seit
05.04.2006
Beiträge
632
Und was bedeutet das genau? Wie nutze ich den?
 

Thomas_xp

Mitglied
Thread Starter
Mitglied seit
05.04.2006
Beiträge
632
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?
 

Gernot2

Mitglied
Mitglied seit
13.11.2003
Beiträge
900
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:

tulix

Mitglied
Mitglied seit
02.01.2008
Beiträge
129
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.
 

Gernot2

Mitglied
Mitglied seit
13.11.2003
Beiträge
900
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).
 
Oben