Was bedeutet "->" in C?

Diskutiere das Thema Was bedeutet "->" in C? im Forum Mac OS Entwickler, Programmierer

  1. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    Was bedeutet das -> in C? Es ist ja irgendwie ein Pointer. Aber wie genau? Wäre **ptr nicht das Selbe?
     
  2. tulix

    tulix Mitglied

    Beiträge:
    129
    Zustimmungen:
    9
    Mitglied seit:
    02.01.2008
    Nein, es ist ein Dereferenzierungsoperator.
     
  3. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    Und was bedeutet das genau? Wie nutze ich den?
     
  4. Thomas_xp

    Thomas_xp Thread Starter Mitglied

    Beiträge:
    627
    Zustimmungen:
    12
    Mitglied seit:
    05.04.2006
    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?
     
  5. Gernot2

    Gernot2 Mitglied

    Beiträge:
    897
    Zustimmungen:
    34
    Mitglied seit:
    13.11.2003
    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.
     
  6. tulix

    tulix Mitglied

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

    Gernot2 Mitglied

    Beiträge:
    897
    Zustimmungen:
    34
    Mitglied seit:
    13.11.2003
    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).
     
Die Seite wird geladen...
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Akzeptieren Weitere Informationen...