int nach double*



  • Hallo,

    void funktion(double* d);
    
    {
    int i;
    funktion(&i); // geht nicht, wie castet man richtig
    }
    
    so funktionierts nicht
    funktion((double*)&i);
    


  • Wo soll der Sinn davon sein?



  • Sisko86 schrieb:

    so funktionierts nicht
    funktion((double*)&i);
    

    Doch, genau so.

    Aber Sinn macht es keinen. Meinst Du vielleicht "es passiert nicht das, was ich erwarte"?



  • Der Sinn besteht darin, das ich eine int Variable habe und diese einer Funktion geben muss die einen double * erwartet.

    Hab jetzt mal debugged
    mein int war 202
    dann bin ich in die funktion hineingesprungen
    und der wert war nicht 202.00 sondern
    4.371311330386e-312#DEN

    Da kann ja was nicht stimmen oder



  • willst du...

    // ... den wert vom int zu nem pointer machen ...
    funktion( (double*) i );
    // ... oder den pointer auf ein double, das den wert des ints enthält ?
    double f = (double) i;
    funktion(&f);
    

    // edit:
    ok, Du willst letzteres.



  • Sisko86 schrieb:

    Der Sinn besteht darin, das ich eine int Variable habe und diese einer Funktion geben muss die einen double * erwartet.

    Hab jetzt mal debugged
    mein int war 202
    dann bin ich in die funktion hineingesprungen
    und der wert war nicht 202.00 sondern
    4.371311330386e-312#DEN

    Da kann ja was nicht stimmen oder

    Was Du willst ist sowas:

    int i = 202;
    double d = static_cast<double>(i);
    funktion(&d);
    

    Du probierst, einen Speicherbereich der einen Int entählt als Double zu interpretieren. Double und Int sind aber von ihrer Repräsentation im Speicher her zwei völlig verschiedene Dinge.



  • Ja ich will den Wert beibehalten.
    Die Funktion erwartet halt einen double*

    ich könnte natürlich so machen

    double temp = (double)i;
    funktion(&temp);

    aber da muss ich den Wert ja zwischen speichern
    dies ist nicht sehr elegant



  • double hat aber doppelt 😮 speicher und der zusätzliche speicher hinter deiner int variable, der für double benötigt wird, macht deinen computer kaputt!!!



  • Sisko86 schrieb:

    ...
    mein int war 202
    dann bin ich in die funktion hineingesprungen
    und der wert war nicht 202.00 sondern
    4.371311330386e-312#DEN

    Da kann ja was nicht stimmen oder

    Doch ... das stimmt schon - in genau dem Sinn, in dem Du das dem Compiler mitteilst: "Nimm die Adresse, an der mein int im Speicher steht (vermutlich 4 Byte simples Hexformat) und tu so als ob da ein double stände (vermutlich 8 Byte im IEEE754-Format)"

    "what you say is what you get" 😉

    ... aber Du sagst ihm was anderes als Du willst. Du willst vermutlich: "Übergib die Adresse eines doubles, dessen numerischer Wert möglichst dicht am numerischen Wert in meiner int-Variable ist"
    ... und das entspricht der 2. Variante vom "wandrer" (nur, dass ich den C-Style-cast wegließe).
    Nicht vergessen: "funktion()" will offensichtlich den Wert verändern (oder ist schlecht designed) ... ob das dann aber in Deine int-Variable "passt", kann ich nicht beurteilen.

    Gruß,

    Simon2.



  • richtig.
    die funktion will eben ne Adresse, dazu musst du das double irgendwo auf den stack schieben (mindestens).
    da double kein integraler wert ist und mehr speicher als int verbraucht*, seh ich keine andere möglichkeit.

    *und von der möglichkeit möcht ich abraten.

    // edit:
    ich bin zu langsam...


  • Mod

    Sisko86 schrieb:

    wie castet man richtig

    Gar nicht. Ein Cast stellt immer eine Lüge dar - also benutze sie nicht, wenn du sie vermeiden kannst. Im Übrigen gibt es keine allgemeine Antwort auf deine Frage: falls es überhaupt sinnvoll ist, den Aufruf mit dem Argument zu bedenken, dann hängt das wie offensichtlich von der Bedeutung von i und d und dem Zweck von funktion ab.



  • Habs verstanden,
    werde einen double Variable anlegen.



  • ok, aber pass auf, dass du keinen dangling pointer bekommst!


Anmelden zum Antworten