将指针转换为void *

时间:2016-05-26 12:04:57

标签: c++

我有工会

union Data
{
   uint8_t * utf8;
   uint16_t * utf16;
   uint32_t * utf32;
};

和变量Data data;如何将data投射到void*?联合大小等于任何指针的大小,因为它只包含指针。那么为什么我不能像(void*)data

这样做

3 个答案:

答案 0 :(得分:1)

你无法将object投射到void*,但你可以将它指向void *,如下所示:

Data d;
void * d_ptr = (void *) &d;

再次获取对象:

Data &d2 = * (Data *) d_ptr;
Data *d3 = (Data *)d_ptr;

答案 1 :(得分:0)

我找到了解决方案:

    union Data
   {
      uint8_t * utf8;
      uint16_t * utf16;
      uint32_t * utf32;
      void* raw;
   };

当我返回data.raw它应该给结果相同(但没有编译错误)为(void*) data(?)。

答案 2 :(得分:-1)

您可以使用static_cast

来使用显式强制转换
foreach (var entry in entries)
{
   var en = entry; 
   var result = DoSomeAction(o => o.Action(en));
}
相关问题