提问人:john_hatten2 提问时间:8/30/2023 最后编辑:john_hatten2 更新时间:8/30/2023 访问量:47
使用一维数组初始化结构体数组
Initialise struct array with a 1d array
问:
我有一个常量数组,它来自我无法修改的定义。
#define MY_ARRAY {1,11,111,2,22,222,3,33,333}
#define SIZE 3
我想将这个数组分配给一个 const 结构数组
// EDIT : Added mixed sizes to show there might be a padding problem as well
struct foo {
uint8_t val1;
uint32_t val2;
uint32_t val3;
}
const struct foo my_foo[SIZE] = MY_ARRAY;
但是我的编译器抱怨在初始值设定项周围缺少大括号。它期望有如下内容:
const struct foo my_foo[SIZE] = {{1,11,111},{2,22,222},{3,33,333}};
我需要某种类型转换,但我无法让它工作
我试过这个:
const struct foo my_foo[SIZE] = (const struct foo[SIZE]) MY_ARRAY;
但我得到了同样的警告
答:
0赞
PoolloverNathan
8/30/2023
#1
在这种情况下,您可能可以使用指针强制转换:
const int[SIZE * 3] numbers = MY_ARRAY;
const struct foo my_foo[SIZE] = *(*my_foo[])&numbers;
评论
0赞
Joel
8/30/2023
这不起作用 godbolt.org/z/vaoE9781a
3赞
ensc
8/30/2023
这可能是未定义的行为,因为很可能有一个填充词,因此struct foo
sizeof numbers != sizeof my_foo
0赞
john_hatten2
8/30/2023
我真正的结构确实包含混合类型,所以填充可能是一个问题,是的
0赞
Andrew Henle
8/30/2023
@ensc 这也是一个严格的混叠违规,也是出于这个原因的 UB。
上一个:将模量的剩余部分转换为分钟
评论