Zeigervariablen keine Ahnung



  • Zeiger speichern die Adresse einer Variable im Arbeitsspeicher.

    Um die Sache kurz zu fassen:
    Mir ist der Umgang mit Zeigern nocht nicht so ganz klar.
    Er speichert die Adresse einer Variable und in dieser Adresse ist ein Wert
    verborgen oder diese Adresse enthält einen Wert meinetwegen eine int Zahl.
    Darum geht es hauptsächlich.
    Die Frage ist:
    wie gehe ich vor wenn ich z.B mit dem Wert eine Multiplikation
    durchführen möchte und wie gehe ich vor wenn ich mich nur
    auf die Adresse beziehen möchte und wie mache ich es wenn
    ich eine Funktion habe die so lautet
    ausrechnen(int *pzahl)
    {
    //eine Mutiplikation
    }

    Das ist z.B klar 
    
    void Asci(char *text) 
    { 
      ....... 
      ....... 
    } 
    
    Aufruf 
    void main() 
    { 
      char zeile[] = "Hallo"; 
      Asci(zeile); 
    
    }
    

    -------------------------------------

    Aber das nicht 
    
    void berechne(int *zahl) 
    { 
      ....... 
      ....... 
    } 
    
    void main() 
    { 
    
    berechne(????) 
    
    }
    


  • Das erste funktioniert nur, weil ein Array-Name ein Zeiger ist.
    Und jetzt zum zweiten:

    void berechne(int *zahl)
    {
        cout << "zahl * 2 = " << (*zahl) * 2 << endl;    // Mit dem Dereferenz-Operator (*) den Wert lesen, mit 2 multiplizieren und ausgeben
    }
    
    int main()
    {
        int IrgendEineZahl=4;
        berechne(&IrgendEineZahl);    // Adresse von IrgendEineZahl übergeben
        return 0;
    }
    


  • Das ist vor allem spannend für call-by-reference:

    void square(int *p) {
      *p *= *p;
    }
    
    int main() {
      int i = 2;
      square(&i);
      printf("%d\n", i); //gibt 4 aus
      return 0;
    }
    

    oder halt für Arrays:

    void double_array(int *array, int len) {
      int i;
      for(i = 0; i < len; ++i) array[i] *= 2;
    }
    
    int main() {
      int a[3]; 
      a[0] = 1;
      a[1] = 2;
      a[2] = 3;
      double_array(a, 3);
      printf("%d, %d, %d\n", a[0], a[1], a[2]); //gibt 2, 4, 6 aus
      return 0;
    }
    

Log in to reply