如何初始化具有 unint_t 作为灵活数组成员的结构?

我定义了一个struct,有一个成员类型是uint8_t,这个成员存储mac地址。

在 Arduino IDE 上编程。

结构:

typedef struct devInfo{
  uint8_t address[];
  unsigned int count;
  unsigned int filePos;
}struct_devInfo;
  • 问题 1:

我用这两种方式给一个值,但不能给变量赋值。

方法一> struct_devInfo slave = {{0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6}, 0, 0};

方法二> slave.address[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6};

如何访问这种类型的值?

  • 问题 2:

我将使用这个结构的变量,salve1,slave2...等。

除了结构,还有什么更好的方法吗?你能演示一下吗?

具有灵活数组成员的结构需要是结构中的最后一个成员。更改为

typedef struct devInfo{
  unsigned int count;
  unsigned int filePos;
  uint8_t address[];
}struct_devInfo;

然后你需要分配足够的内存:

struct_devInfo *p = malloc(sizeof *p + size);

那么你可以这样做:

const uint8_t initArr[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6};
memcpy(p, initArr, sizeof initArr);

但由于它似乎是一个不需要灵活成员的字段,因此我会使用它:

typedef struct devInfo{
  unsigned int count;
  unsigned int filePos;
  uint8_t address[6]; // Specify the size
}struct_devInfo;

那么你就不需要分配内存

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

初始化struct数组成员的最有效方法?

与具有柔性数组成员的匿名结构联合

C ++“替换”为具有灵活数组成员的结构

初始化列表中的零初始化数组成员

为什么灵活数组成员的静态初始化有效?

可变长度数组和灵活数组成员之间有什么区别?

具有灵活数组成员的结构的数组如何表现?

具有灵活数组成员的结构的大小

初始化固定的C数组成员结构

没有命名成员的GCC错误结构灵活数组成员

具有数组成员的结构

弹性数组成员的非静态初始化?

灵活数组成员的静态初始化

sizeof()具有零长度数组成员的结构

是否允许返回具有灵活数组成员的结构?

从具有灵活数组成员的结构强制转换为没有该变量的其他结构是否是未定义的行为?

具有std :: enable_if_t的模板类,静态const成员初始化

使用std :: index_sequence初始化具有固定大小数组成员的POD结构容器

为什么使用灵活的数组成员进行的结构初始化无效但对于固定大小的数组成员却有效?

数组成员的初始化程序无效

如何均匀地分配具有灵活数组成员的结构体数组?

具有弹性char数组成员的结构

当我对结构进行浅拷贝时,灵活数组成员没有被复制

返回具有数组成员的本地结构

具有灵活数组成员的结构的“数组”

比较指向具有灵活数组成员的结构的 2 个指针

如何通过引用初始化函数内部的结构数组成员

具有灵活数组成员的结构和具有指针成员的结构之间的区别

在编译时初始化灵活的数组成员