Anfänger - Verständnisfrage Rückgabe Referenzen



  • Ich möchte sicher gehen, dass ich eine Aufgabe richtig verstanden habe.

    double & valueAt( double * array , unsigned int index) {
    return array[index];
    
    valueAt(x, 2) = 1.0;
    }
    

    Aufgabe war, durch eine Funktion einen Wert speichern zu können, sprich die Funktion musste einen Speicherplatz zurückgeben.

    Nun meine Schlussfolgerungen:

    1. Würde ich double array[] übergebe, würde eine lokale Kopie erzeugt, die nach Verlassen der Funktion zerstört wird. Sprich, der Wert von return array[index] existiert nicht mehr.

    2. Mit double * array (call-by-value) arbeite ich jedoch weiterhin mit dem Originalwert. return array[index] gibt also auch nach Verlassen noch einen existierenden Wert zurück.

    3. Würde ich return array[index] als Zeiger zurückgeben, wäre eine Speicheradresse übergeben und die Funktion könnte die 1 hier nicht eintragen, da ich ja nicht dereferenziere. Daher eine Referenz des Arrays, um auch wirklich auf array[index] zuzugreifen und nicht auf die Speicheradresse.

    Öhm.. richtig?! 😮 😕



  • 1.) Nein.
    2.) call-by-value ? Nein.
    3.) Haeh? Der Code nach return wird nicht ausgefuehrt, x ist unbekannt.

    Btw. Wo ist jetzt der Punkt mit CLI oder .Net?

    Aufgabe war, ...

    Bitt Aufgabe posten und nicht deine Interpretation der Aufgabe!



  • [quote="dummwiebrot"]Ich möchte sicher gehen, dass ich eine Aufgabe richtig verstanden habe.

    double & valueAt( double * array , unsigned int index) {
    return array[index];
    }
    
    valueAt(x, 2) = 1.0;
    

    Entschuldigung, der Quelltext war etwas länger, ich habe einfach die für mich wichtige Funktion und den Funktionsaufruf zusammen kopiert. Selbstverständlich steht der Aufruf nicht in der Funktion.

    Und nun..
    1. Nein. - ja was denn nein? "Nein, das stimmt so nicht" (wieso) oder "Nein, der Wert existiert nicht mehr, du hast recht."
    2. wenn nicht call-by-value - was dann?
    3. siehe oben 😉



  • Und nochmal hupps.. da bin ich wahrlich ins falsche Forum gerutscht. ich poste es nochmal im richtigen. danke :).



  • ich habe einfach die für mich wichtige Funktion und den Funktionsaufruf zusammen kopiert

    Und du kannst beurteilen, was wichtig ist und was nicht?

    Würde ich double array[] übergebe, würde eine lokale Kopie erzeugt

    Nein.

    würde eine lokale Kopie erzeugt, die nach Verlassen der Funktion zerstört wird

    Lokale Objekte werden am Ende ihres Scopes automatisch vernichtet. Leider hast du aber kein lokales Objekt. Also auch nein.

    Sprich, der Wert von return array[index] existiert nicht mehr.

    Nein, es ist ein Wert, der durch die Funktion zurueckgegeben wird. Also auch nein.

    double * array (call-by-value)

    Ist kein call-by-value.

    (call-by-value) arbeite ich jedoch weiterhin mit dem Originalwert

    Nein, call-by-value bedeutet Kopie!

    wenn nicht call-by-value - was dann

    Na dann ueberlege mal, was es noch gibt.

    Würde ich return array[index] als Zeiger zurückgeben

    Dann waers von einem anderen Typ und koennte so nicht benutzt werden. Referenzen und Zeiger unterscheiden sich nicht grossartig.

    Und nochmal hupps.. da bin ich wahrlich ins falsche Forum gerutscht. ich poste es nochmal im richtigen. danke

    Warte und lass es einfach verschieben.


Anmelden zum Antworten