1

私は言っているコードを持っています

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)

ここで、 の型はinternalItrunordered_mapありinternalItr->second、 のインスタンスを与えますHostTraffic

4

4 に答える 4

3

internalIPItr->second.outboundPortIPsで与えられるのアドレスへのポインタは&、 に変換されvoid*ます。

于 2012-12-17T08:10:31.713 に答える
1

internalIPItr->second.outboundPortIPsを受け取る関数にポインターを渡していますvoid*

&アドレスをinternalIPItr->second.outboundPortIPs取得します (つまり、そのアドレスへのポインターを提供します)。 (void*)そのポインタを にキャストしますvoid

于 2012-12-17T08:09:51.713 に答える
1

internalPltrsecondは、 という名前のメンバーを持つ という名前のメンバーを持つ構造体へのポインターoutboundPortIPsです。( &addressof) 演算子は、そのメモリ アドレスを返し、その(void *)アドレスを void ポインターにキャスト (明示的な型変換を実行) します。

于 2012-12-17T08:12:15.567 に答える
0

すでに答えはそれが何をするかです(を返しますvoid*

ただし、このタイプのキャストは「型パニング」と呼ばれ、未定義の動作と見なされることに注意してください。(ただし、適切なコンパイル オプションを設定または設定解除すると、私が知っているすべてのコンパイラで動作します。)

于 2012-12-17T08:15:02.250 に答える