Was hat es mit den *Zeigern auf sich ?



  • Moin,

    bitte nicht lachen, aber das wird sicher wieder eine typische Anfängerfrage sein:

    Was hat es mit den Zeigern auf sich?
    Habe jetzt ein Kapitel über Zeiger auf Variablen, Zeiger auf Funktionen ( für C eher nicht relevant) und Zeider auf Zeiger durchgearbeitet.

    Das Prinzip habe ich verstanden, doch wozu kann ich das in der Praxis gebrauchen? (die Beispiele im Buch waren leider nur da um das Prinzip zu verstehen, was da so in den Var und Zeigern abgeht).

    #include <stdio>

    int x, *z;

    x=10
    printf(" Der Wert der Var x ist %i",x);
    printf(" Die Adresse von x ist %p",x);

    *z=&x;
    z=50;

    printf("Der Wert der Var x ist %i",x);

    So nach dem Motto, also nichts wirklich realitätsnahe, wäre für eine Menge Beispielcode dankbar, der einen Anfänger nicht gleich überfordert.

    Hoffe es hat diesmal mit dem codetag gefunzt, sonst gibts wieder Mecker.



  • Hups, schon wieder keincodetag. Irgendwie funktionukelt das bei mir nicht.



  • zum beispiel:
    1)

    void bar_normal (int i) {
       i = 20;
    }
    
    void bar_zeiger (int *i) {
       *i = 20;
    }
    
    int main () {
       int i = 10;
       bar_normal(i);
       //ups, bar_normal kann i gar nicht ändern!
       bar_zeiger(&i);
       //bar_zeiger hat i geändert.
       *i == 20;
    }
    

    dynamischer Speicher (Speicher, dessen Größe du erst zur Laufzeit weißt)
    also um auf dem Heap arbeiten zu können

    3)Allerhand wie zb Linked Lists etc



  • Original erstellt von <dickunddoof>:
    **Was hat es mit den Zeigern auf sich?
    **

    Das möchte in dem Kapitel zu Zeigern aber schon beschrieben sein! Zeiger sind Variablen, die auf eine Adresse auf dem Stack in deinem Arbeitsspeicher zeigen können, also z.B. auf andere Variablen, Funktionen etc.

    Original erstellt von <dickunddoof>:
    **... Zeiger auf Funktionen ( für C eher nicht relevant)...
    **

    W-I-E-S-O "eher nicht relevant"? Zeiger auf Funktionen sind in C sehr gut und auch sehr wichtig, damit lassen sich viele Dinge realisieren, z.B. Einbinden von Funktionen in Strukturen oder Auswahl von Funktionen zur Laufzeit etc. pp.

    Praktische Anwendung von Zeigern wäre z.B. der "call by reference", womit du also als Argument eine Adresse übergibst und die dann als Parameter in einer Funktion in einem Zeiger gespeichert wird, womit du die Variable in der aufrufenden Funktion änderst, da du ja auf die Adresse der 1. Variablen (des Arguments) und nicht auf eine extra auf dem Stack angelegte 2. Variable zugreifst. Zeiger machen Programme zudem viel dynamischer und sind unverzichtbar, wenn du mich fragst 😃

    Original erstellt von <dickunddoof>:
    **
    Hups, schon wieder keincodetag. Irgendwie funktionukelt das bei mir nicht.
    **

    "code type="C++"  /code"
    

    Wenn du die beiden UBB-Tags auch direkt hintereinander schreibst, ist das kein Wunder. :p
    Du musst deinen Code schon darin einbetten und erst am Ende des Codes den Tag mit "/code" schließen.


Anmelden zum Antworten