2014-05-09 27 views
2

我試圖用指針成員將(char *)轉換成struct。請告訴我下面兩種類型轉換策略是否有區別。還顯示了struct使用指針成員類型化結構

struct videoPacket{ 
    uchar * videoData; 
}video; 

// and initializing 'video' to some value 

策略1:

videoPacket * videoPointer = &video; 
char * buffer = (char *)videoPointer; 

策略2:

videoPacket * videoPointer = &video; 
char * buffer = (char *)videoPointer->videoData; 

由於struct具有單個部件,將所述buffer沒有指向相同的內容?

編輯:如果我想將下面顯示的結構轉換爲char *,我該怎麼做呢?

struct struct1{ 
    uchar * struct1data1; 
     char struct1data2; 
}video; 
+0

您可以將_anything_轉換爲具有未定義行爲的'char *'。 – timrau

+0

如果你停止使用C風格的演員陣容,你會發現第一個演員需要一個'reinterpret_cast'(這通常暗示你在做一些不明智的事情),而第二個演員則使用'static_cast',這不太令人擔憂。 –

回答

2

策略1不正確。它返回一個指向存儲你想要數據地址的內存的指針。

策略2是「正確的」。它返回數據的地址。

0

你做它的方式真的沒關係。而且這不是你的結構只有一個成員的事實。事實上,結構中的第一個成員是uchar * videoData,因此「video」和「video.videoData」指向內存中的相同位置。