Allgemeine Frage zu Pointern



  • Hallo,

    eines würde ich gerne bestätigt oder widerlegt haben: Ich nehme an, dass man eigentlich auf jeden Pointer vezichten könnte. Man könnte ÜBERALL; wo man nen Pointer übergibt einfach die ganz normale Variable mit dem Adress-Operator davor, also z.b. &a, übergeben. Ist es denn so? Kann ich also jeder Funktion, die einen Pointer verlangt, die Adresse mit '&' gefplt vom Variablen Namen über geben.??



  • Bei der Übergabe, sicher. Wenn du selber eine Funktion schreibst, die nen Pointer übernimmt, musst du ihn natürlich angeben.



  • Die Frage beruht auf einem grundlegenden Verständnisproblem: Wenn a eine Variable (oder ein anderer lvalue-Ausdruck) ist, dann ist &a ein Pointer darauf.



  • wenn foo eine Variable ist, dann ist &foo ein Zeiger auf dieselbe
    wenn foo ein Zeiger auf eine Variable ist, dann ist *foo die Variable und &*foo ein Zeiger auf die Variable (foo == &*foo)



  • Einleuchtend. So weit so gut. Eine letzte Frage, zur Selbstsicherung:

    Einen pointer auf nen int, zb. int* a kann man mit *a dereferenzieren, um den Inhalt des gezeigten Speicherblocks zu manipulieren. Kann man das ganauso mit folgendem machen ??:

    ----------------
    int a;
    a = 222;
    cout << a;
    cout << *&a;
    ---------------

    Liefern nun die beiden 'couts' dasselbe? (Ich nehme mal an, ja!)
    Die eigentliche frage dieses posts könnte man eigentlich so formulieren: Können der Dereferenzierungsoperator und der Adressoperator in einem Schritt kombiniert werden?



  • NurZuBesuch schrieb:

    Liefern nun die beiden 'couts' dasselbe? (Ich nehme mal an, ja!)
    Die eigentliche frage dieses posts könnte man eigentlich so formulieren: Können der Dereferenzierungsoperator und der Adressoperator in einem Schritt kombiniert werden?

    Klar. 🙂



  • Ich nehme an, dass man eigentlich auf jeden Pointer vezichten könnte.

    Das ja nun nicht, bei dynamischen Arrays oder auf dem Heap abgelegten Speicher funktioniert dies nicht.

    MfG mAV



  • Er hat ganz sicher gemeint, dass er keinen Pointer erstellen muss, um einen zu übergeben. 😉


Anmelden zum Antworten