您使用一元运算符
*
来取消引用指针。取消引用指针意味着提取所指向的值,以获取原始类型的值。
// 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;
编辑2:(删除编辑1,因为它与你实际的问题无关,而是基于误解)
从你的说明中看来,你想知道如何设置一个指向已从
void *
转换为
double *
的指针所指向的值。为了做到这一点,我们需要在赋值语句的左侧使用一元运算符
*
,以表示我们要写入指针所指向的位置。请注意保留html标记。
void *vp = &foo;
*(double *)vp = 2.0;
printf("%F\n", *(double *)vp);
所以,我假设你的LinkedListCurrent
返回指向链表中某个元素的void *
,并且你希望更新该元素。在这种情况下,你需要执行以下操作:
*(double*)LinkedListCurrent(angles) = dbangle;
这将更新由
LinkedListCurrent
返回的指针所指向的值,使其等于
dbangle
。我认为这就是你想做的事情。
如果你试图更新
LinkedListCurrent
返回的
指针,那么你是做不到的。该指针已被复制到一个临时位置,用于从函数中返回。如果你需要返回一个可以更新的指针,你必须返回一个指向指针的指针,并更新内部指针。
我的解释基于我根据你发布的示例片段和我对接口的一些猜测,推断出你想做什么。如果你想要更好的解释,或者如果我的某个假设是错误的,你可能需要尝试发布一些实际的代码、任何错误消息以及关于你想做什么的更详细的说明。显示链表数据类型的接口将有助于提供一些上下文来解释你的问题是关于什么的。
编辑3:正如评论中指出的那样,你可能不应该在这里进行强制类型转换;强制类型转换应该尽可能少地使用。通常应该使用模板化的集合类型,这样你的编译器就可以为你进行类型检查。如果你需要在同一个结构中存储异构类型,它们通常应该共享一个超类,并具有执行操作的虚拟方法,如果你真的需要将一个值强制转换为特定类型,则使用
dynamic_cast
(因为
dynamic_cast
可以在运行时检查类型是否正确)。