是什么意思(void *)&

时间:2012-12-17 08:08:22

标签: c++ pointers

我有一段代码说

clock.start();
for (unordered_map <uint32_t,HostTraffic>::iterator internalIPItr = hostTraffic.begin();
     internalIPItr != hostTraffic.end();
     ++internalIPItr)
  {
     if (!pgBulkInserter.insert(NULL, internalIPItr -> first,
                                internalIPItr -> second.inboundFlows,
                                (void*)&(internalIPItr -> second.outboundPortIPs),
                                internalIPItr -> second.roles)) {
        return -1;
     }
     clock.incrementOperations();
  }

我的问题是我不理解

的含义
(void*)&(internalIPItr -> second.outboundPortIPs).

您可以将for(....)视为

for (int internalItr = beginning -> end)

其中internalItr的类型为unordered_mapinternalItr->second的实例为HostTraffic

4 个答案:

答案 0 :(得分:2)

internalIPItr->second.outboundPortIPs给出的指向&地址的指针将转换为void*

答案 1 :(得分:1)

您将指向internalIPItr->second.outboundPortIPs的指针传递给void*的函数。

&获取internalIPItr->second.outboundPortIPs的地址(即为您提供指向它的指针)。 (void*)将指针强制转换为void

答案 2 :(得分:1)

internalPltr是一个指向结构的指针,它有一个名为second的成员,其成员名为outboundPortIPs&(addressof)运算符返回其内存地址,然后(void *)强制转换(执行显式类型转换),该地址为void指针。

答案 3 :(得分:0)

已经回答了它的作用(返回void*

但是你应该预先警告这种类型的铸造被称为“类型双关语”并且它被认为是未定义的行为。 (尽管如此,它适用于我所知道的所有编译器,并且设置了相应的编译选项或未设置。)