有关此类型转换问题的任何想法?
这就是我想要做的.这不是实际的代码:
LinkedList* angles;
double dblangle;
dblangle = (some function for angle calculation returning double value);
(double*)LinkedListCurrent(angles) = &double;
Run Code Online (Sandbox Code Playgroud)
我希望你明白这个主意.最后一行导致了问题.最初角度是void*类型所以我必须先将其转换为double*.
您使用一元运算*符取消引用指针.取消引用指针意味着提取指向的值,以获取原始类型的值.
// 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;
Run Code Online (Sandbox Code Playgroud)
编辑2 :(删除编辑1,因为它与您的实际问题无关,但是基于错误传达)
从您的澄清,看起来您想知道如何设置一个从a void *转换为a的指针所指向的值double *.为了做到这一点,我们需要*在赋值的左侧使用一元,以指示我们要写入指针指向的位置.
// 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);
Run Code Online (Sandbox Code Playgroud)
所以,我假设您LinkedListCurrent正在返回void *指向您要更新的链接列表中的某个元素.在这种情况下,您需要执行以下操作:
*(double*)LinkedListCurrent(angles) = dbangle;
Run Code Online (Sandbox Code Playgroud)
这更新了返回的指针指向的值LinkedListCurrent等于dbangle.我相信这就是你想要做的.
如果您尝试更新返回的指针LinkedListCurrent,则无法执行此操作.指针已被复制到临时位置以从函数返回.如果需要返回可以更新的指针,则必须返回指针指针,并更新内部指针.
我上面的解释基于我认为你要做的事情,基于你发布的示例代码片段以及我对界面做出的一些猜测.如果你想要一个更好的解释,或者我的一个假设是坏的,你可能想尝试发布一些实际代码,你得到的任何错误消息,以及你正在尝试做什么的更详细的解释.显示链接列表数据类型的界面将有助于为您的问题提供一些上下文.
编辑3:正如评论中所指出的,无论如何你可能不应该在这里投掷; 应尽可能少地使用演员阵容.您通常应该使用模板化的集合类型,因此您的编译器实际上可以为您进行类型检查.如果需要在同一结构中存储异构类型,它们通常应该共享一个超类并使用虚方法对它们执行操作,并且dynamic_cast如果您确实需要将值转换为特定类型,则使用它(因为dynamic_cast可以在运行时检查类型是正确的).
| 归档时间: |
|
| 查看次数: |
11187 次 |
| 最近记录: |