2014-05-09 29 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”指向内存中的相同位置。