int nach double*
-
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#DENDa 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#DENDa 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#DENDa 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...
-
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!