pointer in funktion übergeben

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

pointer in funktion übergeben

Beitrag 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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: pointer in funktion übergeben

Beitrag 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).
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Re: pointer in funktion übergeben

Beitrag 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
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: pointer in funktion übergeben

Beitrag 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.
Antworten