将字段存储在结构C中的有效方法

问题描述 投票:0回答:1

我在C中有一个结构:

typedef struct storing_fields
{
  int x;
  int y;
  int z;
}

在某些情况下,基于x的某个特定值,我不需要y和z,但在某些情况下,我需要全部使用它们。

我的问题是:根据上述陈述,将这些字段存储在一个或多个结构/工会等中的最佳方法是什么?

c structure storage
1个回答
0
投票

在内存方面,通常的做法是将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
© www.soinside.com 2019 - 2024. All rights reserved.