Seite 1 von 1

pointer in funktion übergeben

Verfasst: 15. August 2011 16:00
von Nvidia
Hallo,

Code: Alles auswählen

void r(int *&k){
    k = new int(4);
}
int main(){
    int *k = 0;
    r(k);
    qDebug() << *k;
}
Als Ausgabe bekomm ich 4.
Aber wieso funktioniert das nicht wenn ich das & weglasse.
Ich dachte auch ohne das & ist der pointer in der funktion der selbe?
Weil ich hab in Dokumentationen gesehen, dass die nur z.b. int *pointer übergeben ohne das & und trotzdem der originale Wert verändert wird.
Wieso funktioniert das bei mir nicht?

Re: pointer in funktion übergeben

Verfasst: 15. August 2011 16:18
von franzf
Bedenke: Ein Zeiger ist auch nur ein Objekt, er hält einen Wert - die Adresse des Objektes, auf das er zeigt. Wie ein normales "int" lässt sich auch so eine Zeiger-Objekt kopieren. Der Wert bleibt dabei der selbe (wird ja kopiert) allerings habe ich nach der Kopie ZWEI Objekte.

Ein kleines Beispiel, damit du das vllt. besser verstehst:

Code: Alles auswählen

#include <iostream>
using namespace std;

int main() {
    {
        int a=10;
        int b=a;
        cout << a << " " << b << endl;
    }
    {
        int *a = new int(10);
        int *b = a;
        cout << "Objekt-Wert " << *a << " " << *b << endl;
        cout << "Zeiger-Wert " << a << " " << b << endl;
        cout << "Zeiger-dressen " << &a << " " << &b << endl;
    }
}
Damit sollte auch klar sein, warum in deinem Code eine Zeiger-Kopie eben gerade NICHT ausreicht: Du willst ein neues Objekt erstellen, dabei soll der übergebene Zeiger auf das neue Objekt zeigen. Wäre der Zeiger nur eine Kopie, bliebe der ursprüngliche Zeiger unverändert und würde irgendwo hinzeigen (wo er auch schon vorher hingezeigt hat).

Re: pointer in funktion übergeben

Verfasst: 15. August 2011 16:44
von Nvidia
ok das hab ich verstanden,
aber hier wird doch auch eine Zeigerkopie gemacht und trotzdem wird die übergebene Variable verändert.
Wie machen die das dann?
http://doc.qt.nokia.com/latest/qiodevice.html#read

Re: pointer in funktion übergeben

Verfasst: 15. August 2011 16:46
von franzf
Der char-Pointer ist schon initialisiert, wenn er der Funktion übergeben wird. Bei dir soll er ja eben in der Funktion erstellt werden.