Sie verwenden das unäre *
Operator, um einen Zeiger zu derefenzieren. Die Dereferenzierung eines Zeigers bedeutet, dass der Wert, auf den er zeigt, extrahiert wird, um einen Wert des ursprünglichen Typs zu erhalten.
// Create a double value
double foo = 1.0;
// Create a pointer to that value
double *bar = &foo;
// Extract the value from that pointer
double baz = *bar;
bearbeiten 2 (löschte Edit 1, da er für Ihre eigentliche Frage nicht relevant war, sondern auf einem Kommunikationsfehler beruhte)
Aus Ihrer Klarstellung geht hervor, dass Sie sich fragen, wie Sie einen Wert setzen können, auf den ein Zeiger zeigt, der von einem void *
zu einer double *
. Um dies zu tun, müssen wir die unäre *
auf der linken Seite der Zuweisung, um anzuzeigen, dass wir an die Stelle schreiben wollen, auf die der Zeiger zeigt.
// Get a void * pointing to our double value.
void *vp = &foo;
// Now, set foo by manipulating vp. We need to cast it to a double *, and
// then dereference it using the * operator.
*(double *)vp = 2.0;
// And get the value. Again, we need to cast it, and dereference it.
printf("%F\n", *(double *)vp);
Ich gehe also davon aus, dass Ihr LinkedListCurrent
gibt eine void *
die auf ein Element in der verknüpften Liste zeigt, das Sie aktualisieren möchten. In diesem Fall müssen Sie wie folgt vorgehen:
*(double*)LinkedListCurrent(angles) = dbangle;
Dies aktualisiert den Wert, auf den der Zeiger zeigt, der von LinkedListCurrent
gleichzusetzen mit dbangle
. Ich glaube, das ist es, was Sie zu tun versuchen.
Wenn Sie versuchen, die Zeiger zurückgegeben von LinkedListCurrent
können Sie das nicht tun. Der Zeiger wurde an einen temporären Ort kopiert, um aus der Funktion zurückzukehren. Wenn Sie einen Zeiger zurückgeben müssen, den Sie aktualisieren können, müssen Sie einen Zeiger auf einen Zeiger zurückgeben und den inneren Zeiger aktualisieren.
Meine obige Erklärung basiert auf dem, was ich glaube, dass Sie versuchen, zu tun, auf der Grundlage des Beispiels Snippet Sie gepostet und einige Vermutungen, die ich über die Schnittstelle gemacht haben. Wenn Sie eine bessere Erklärung wünschen, oder wenn eine meiner Annahmen falsch war, sollten Sie versuchen, etwas tatsächlichen Code, alle Fehlermeldungen, die Sie erhalten, und eine detailliertere Erklärung dessen, was Sie zu tun versuchen, zu posten. Das Aufzeigen der Schnittstelle zum Datentyp der verknüpften Liste würde helfen, einen Kontext für Ihre Frage zu schaffen.
bearbeiten 3 : Wie in den Kommentaren erwähnt, sollten Sie hier wahrscheinlich sowieso nicht werfen; Würfe sollten so wenig wie möglich verwendet werden. Im Allgemeinen sollten Sie schablonenhafte Auflistungstypen verwenden, damit Ihr Compiler die Typüberprüfung für Sie durchführen kann. Wenn Sie heterogene Typen in derselben Struktur speichern müssen, sollten sie sich im Allgemeinen eine Oberklasse teilen und über virtuelle Methoden verfügen, um Operationen mit ihnen durchzuführen, und Sie sollten dynamic_cast
wenn Sie einen Wert wirklich auf einen bestimmten Typ übertragen müssen (wie dynamic_cast
kann zur Laufzeit prüfen, ob der Typ korrekt ist).