Zeiger bzw. Pointer



  • Hi zusammen,

    #include <stdio.h>
    
    int main()
    {
      int a=5;
      int *b;
    
      b=&a;
    
      printf("%d\n",b);//hier wird eine 7-stellige zahl ausgegeben, also die Adresse von a und in dieser Adresse steht der Wert 5?
      printf("%d\n",&b);//hier wird eine 7-stellige zahl ausgegeben, also die Adresse von b
      printf("%d\n",*b);//hier wird der Wert 5, der in der Adresse(also die adresse die beim 1. printf ausgegeben wird) von a steht ausgegeben
    
      return(0);
    }
    

    Stimmt das?

    Was bringt es eigentlich so mit Adressen rumzuspielen(&)?

    mfg robby



  • Die Kommentare stimmen.

    Du solltest nur bei den ersten beiden Fällen statt %d ein %p nehmen. (p für Pointer).

    Du kannst damit auf Speicher zugreifen, von dem du im voraus nicht weist, wo er liegt.

    Oder der Variablentausch (Rückgabe von mehr als einem Wert):

    #include <stdio.h>
    
    void swap(int *i, int *j) {
       int t = *i;
       *i = *j;
       *j = t;
    }
    
    void main() {
       int a = 23, b = 47;
       printf("Before. a: %d, b: %d\n", a, b);
       swap(&a, &b);
       printf("After . a: %d, b: %d\n", a, b);
    }
    

    Ohne Zeiger geht das nicht als C-Funktion.


  • Mod

    1. Nein. Undefiniertes Verhalten. Der Formatspezifizierer für Pointer ist %p, nicht %d. Falls zufällig die Größe von int und Pointern auf deinem System genau gleich sein sollte, dann kommt eine Zahl heraus, die man als Adresse von a auffassen kann.
    2. Siehe 1.
    3. Ja.

    Was das bringt?
    Kurze Antwort: Lies ein Lehrbuch.
    Lange Antwort: Mit Pointern kann man komplexe Datenstrukturen erzeugen und Funktionsparameter "by reference" übergeben.


Anmelden zum Antworten