Was bedeutet "->" in Bezug auf Pointer?
-
Hallo!
Wir haben heute im Unterricht folgendes Programm geschrieben:#include <stdio.h> #include <stdlib.h> struct student { char* vorname; char* nachname; int matrikel; }; typedef struct student Student; typedef struct node Node; struct node { Student data; Node* next; }; void printStudent(Student* studi); void printAllNode(Node* start); int main(int argc, char** argv) { Node* head = (Node*)malloc(sizeof(Node)); if (head == 0L ) { return EXIT_FAILURE; } head->data.vorname = "Hans"; head->data.nachname = "Peter"; head->data.matrikel = 123; head->next = 0L; Node* b = (Node*)malloc(sizeof(Node)); if (b == 0L ) { return EXIT_FAILURE; } b->data.vorname = "Robert"; b->data.nachname= "Schutz"; b->data.matrikel = 124; b->next = 0L; head->next = b; printStudent(&(head->data)); return EXIT_SUCCESS; printAllNode(head); } void printStudent(Student* studi) { printf("\n"); printf("\t Vorname: %s",studi->vorname); printf("\t Nachname: %s", (*studi).nachname); printf("\t M-Nr.: %d", studi->matrikel); } void printAllNode(Node* start) { while ( start != 0L){ printStudent(start->data)); start = start->next; }
So, das Programm ist auch hier und dort fehlerhaft, weil ich es nicht geschafft habe, schnell genug mitzuschreiben und den Kram auch noch zu verstehen.
Meine Frage hier bezieht sich auf das Zeichen "->". Ich habe das noch nirgends gesehen, geschweige denn genutzt. Ich kann irgendwie nirgends was dazu finden.
Könnte mir vielleicht jemand (am besten noch in bezug auf den obrigen Quellcode) erklären, was dieser Operator nun genau macht?
Ich wäre dafür sehr dankbar!
Gruß
-
Wie hast du denn gesucht? Das findet man doch in jedem(!) Tutorial oder Buch.
ptr->foo
ist das gleiche wie(*ptr).foo
-
Nunja, ich habe das Buch "C How to program" welches sich über 60 Seiten mit Pointern beschäftigt, nach dem String -> durchsucht, ich habe bei Google "C programmierung "->" " (und so ähnlich) gesucht und 3 Online-Tutorials danach durchsucht.
Aber erstmal danke für deine Hilfe.
In dem Beispiel oben würd edas dann heißen in Zeile 25:
(*head).data.vorname = "hans";Was ich weiß ist, wenn ein "*" vor dem pointer ist, wird auf den Wert an der Andresse zugegriffen.
Doch was ist in diesem Falle der Wert von head ?
Da wo (*head) steht, steht ja normalerweise der Variablenname der Struktur, allerdings hat diese Struktur ja keinen Namen erhalten, oder sehe ich das falsch?
Bitte verzeiht mir meine Dummheit, aber es ist mir wichtig, dass ich das verstehe
Grüße
-
Über den -> Operator greifst du bei Pointern auf die Member einer
struct
zu.head ist der Pointer. Der zeigt bei dir auf den Speicher, den du von
malloc
bekommen hast. (head hat eine Adresse gespeichert)Mit dem * bzw. dem -> dereferenzierst du den Pointer wieder. Du greist auf die Daten zu, auf die der Pointer zeigt.
Beistructs
musst du noch den gewünschten Member mit angeben.Der -> ist syntaktischer Zucker. Man kann auf den ersten Blick sehen: Pointer auf
struct
im Spiel.
-
Vielen Dank Dirk, so wird ein Schuh draus.
Danke an euch beide
Grüße