结构中的结构数组 - 指针类型是什么?

Bee*_*and 4 c c++

我在由perl脚本生成的文件中有以下声明(在编译期间):

 struct _gamedata
{

 short res_count;
 struct
 {
  void * resptr;
  short id;
  short type;
 } res_table[3];
}
_gamecoderes =
{
 3,
 {
  { &char_resource_ID_RES_welcome_object_ID,1002, 1001 },
  { &blah_resource_ID_RES_another_object_ID,1004, 1003 },
{ &char_resource_ID_RES_someting_object_ID,8019, 1001 },
 }
};
Run Code Online (Sandbox Code Playgroud)

我的问题是struct _gamedata在编译期间生成,并且项目的数量res_table会有所不同.所以我不能提供一种res_table预先声明尺寸的类型.

我需要解析这个结构的一个实例,最初我是通过一个指向char的指针(并没有定义struct _gamedata为一个类型.)但我正在定义res_table.

例如

char * pb = (char *)_gamecoderes; 
                           // i.e. pb points to the instance of `struct _gamedata`.
short res_count = (short *)pb;
pb+=2;
res_table * entry = (res_table *)pb;
for( int i = 0; i < res_count; i++ )
{
    do_something_with_entry(*entry);
}
Run Code Online (Sandbox Code Playgroud)

我用这个得到了很好的结果.我不知道如何声明一个类型,_struct gamedata因为我需要能够res_table在编译时处理一个变量长度.

ken*_*ytm 7

由于结构是匿名的,因此无法引用此结构的类型.(res_table只是成员名称,而不是类型的名称).您应该为结构提供一个名称:

struct GameResult {
        short type;
        short id;
        void* resptr;
};

struct _gamedata {
        short res_count;
        GameResult res_table[3];
};
Run Code Online (Sandbox Code Playgroud)

另外,你不应该把它投到data一个char*.的res_countentry的可利用被提取->操作者.这样可以正确计算成员偏移量.

_gamedata* data = ...;
short res_count = data->res_count;
GameResult* entry = data->res_table;
Run Code Online (Sandbox Code Playgroud)

或者干脆:

_gamedata* data;
for (int i = 0; i < data->res_count; ++ i)
   do_something_with_entry(data->res_table[i]);
Run Code Online (Sandbox Code Playgroud)