Frage zu Pointern



  • Hallo Leute,

    ich wollte mal nachfragen ob ich folgenden Code richtig verstanden habe.

    #include <stdio.h>
    
    void cube(int * n) {
      *n = *n * *n * *n;
    }
    
    int main() {
    
      int number = 5;
    
      printf("The number: %d\n", number);
      cube(&number);
      printf("The result: %d\n", number);
    
      return 0;
    }
    

    * bedeutet ja Folge .... es ist ein Zeiger auf eine Speicheradresse.
    & bedeutet Referenz .... (da verstehe ich es nicht ganz) Es referenziert den
    den Inhalt der Adresse denke ich mal

    so demnach müsste ja in der Funktion folgendes berechnet werden

    Zeiger auf eine Adresse = Zeiger auf eine Adresse ..... vom Typ Integer

    mit dem & öffne ich sozusagen die Kiste und schau in die Adresse rein was sich dahinter verbirgt.

    soweit so gut

    aber warum wird unten 125 ausgegeben
    ich rufe die Funktion doch lediglich auf.

    Danke für eure Antworten.



  • * bedeutet ja Folge .... es ist ein Zeiger auf eine Speicheradresse.

    Kontextabhaengig, manchmal bedeutet es Dereferenzierung oder Multiplikation.

    & bedeutet Referenz ....

    Kontextabhaengig, hier ist es der Adressoperator, d.h. zu gegebener Variable gibt er dir die Adresse/Zeiger auf diese.



  • Der Funktion übergibst du die Adresse von number.

    In der Funktion veränderst du den Wert an der Adresse.
    Der * vor dem n bei *n = *n * *n * *n; ist der Dereferenzierungsoperator.


  • Mod

    knivil schrieb:

    & bedeutet Referenz ....

    Kontextabhaengig, hier ist es der Adressoperator, d.h. zu gegebener Variable gibt er dir die Adresse/Zeiger auf diese.

    Insbesondere taucht die Referenz nur im Kontext "C++" auf. Mich deucht, der Threadersteller hat eine Erklärung des Ampersands für die falsche Sprache aufgeschnappt.

    In C bedeutet "&" entweder "Adresse von" oder "bitweises UND".

    Hier wird bei cube(&number); die Adresse von number genommen (die ein Zeiger ist), dieser Zeiger wird an die Funktion übergeben.
    Beim *n = *n * *n * *n; wird in den "*n" Teilausdrücken jeweils der Adresse gefolgt. Das heißt für die linke Seite des Zuweisungsoperators, dass der Wert an dieser Adresse verändert wird und für die rechte Seite, dass der Wert an dieser Adresse genommen wird, um den neuen Wert zu berechnen. Da n jeweils auf number zeigt, wird also der Wert von number genommen, damit gerechnet und dieser dann verändert.



  • Vielen Dank.

    Endlich verstehe ich die Pointer.


Anmelden zum Antworten