(结构*)使用属性值名称进行初始化吗?

时间:2018-09-26 15:24:19

标签: c++ struct initialization memset

我已经定义了这个结构:

typedef struct WHEATHER_STRUCT
{
   unsigned char packetID[1];
   unsigned char packetSize[2];
   unsigned char subPacketID[1];
   unsigned char subPacketOffset[2];
   ...
} wheather_struct;

如何通过属性名称初始化此结构(使用构造函数或new)访问?例如:

wheather_struct.packetID = 1;
  

最后

我尝试了这种解决方案,并且对我有用,但是您认为这是一个不错的选择吗?

WHEATHER_STRUCT * wheather_struct = new WHEATHER_STRUCT();
*weather_struct->packetID = '1';

对于float属性:

wheather_struct->floatAttribute= 111.111

2 个答案:

答案 0 :(得分:1)

在C ++中,您可以使用new进行分配和初始化:

wheather_struct *p = new wheather_struct();

请注意括号的末尾-这是value initialization-用0填充内置类型的成员。

然后:

p->packetID[0] = 1;

答案 1 :(得分:1)

您可以将初始化器{}添加到数组中,以将其初始化为零,如下所示:

struct wheather_struct // no need for typedef in C++
{
   unsigned char packetID[1]{};
   unsigned char packetSize[2]{};
   unsigned char subPacketID[1]{};
   unsigned char subPacketOffset[2]{};
};

然后使用new动态创建对象:

auto w = new weather_struct;

w->packetID[0] = 'A';

别忘了稍后删除

delete w;

但是(更好)使用智能指针:

auto w = std::make_unique<weather_struct>(); // will delete itself

w->packetID[0] = 'A';

// no need to delete it

或者(甚至更好)只是将其用作值对象(并非总是可能):

weather_struct w; 

w.packetID[0] = 'A';