我在C中有一个结构:
typedef struct storing_fields
{
int x;
int y;
int z;
}
在某些情况下,基于x的某个特定值,我不需要y和z,但在某些情况下,我需要全部使用它们。
我的问题是:根据上述陈述,将这些字段存储在一个或多个结构/工会等中的最佳方法是什么?
在内存方面,通常的做法是将size
参数保留为结构的第一个成员,这样您就可以快速有效地迭代元素。
您可以将成员保留在struct声明中,但是malloc
但是需要字节。但是您还可以声明结构的几种类型,但是将它们的数组声明为统一类型,如下所示:
typedef struct storing_fields_full
{
size_t size;
int x,y,z;
} storing_fields_full;
typedef struct storing_fields3
{
size_t size;
int x,y,z;
} storing_fields3;
typedef struct storing_fields2
{
size_t size;
int x,y;
} storing_fields2;
typedef struct storing_fields1
{
size_t size;
int x;
} storing_fields1;
请确保size
成员始终等于sizeof(storing_fieldsx)
,并且您的成员始终处于相同顺序。如果您在数组中具有“混合”的不同类型,则可以像这样高效地对其进行迭代:
int i;
storing_fields_full *data;
for (i=0, data=some_data; i<num_elements; i++, data+=data->size)
{
// do stuff with your data here
}
假设您始终知道结构中实际存在或不存在哪种数据,那么您应该很好。否则,您始终可以像这样测试它:
if (data->size > offsetof(storing_fields_full,z)) // data is present