这就是我在构建时用指针初始化结构的方法。
struct example_struct {
int count;
int *values;
};
int i1[] = { 1, 2 };
int i2[] = { 10, 20, 30 };
struct example_struct items[] = {
{ .count = 2, .values = &i1[0] },
{ .count = 3, .values = &i2[0] },
{ .count = 0, .values = NULL },
};
我面临的实际情况比这个例子相当冗长和复杂。
因此,我正在寻找一种方法来避免数组的额外声明。相反,我想直接记录到位的数组,
这意味着将 .values = &i1[0]
转换为 .values = { 1, 2 }
(不幸的是,这对 gcc 来说是无效语法)。
是否有解决方案?
需要明确的是,我知道这个示例可以更改为
items[] = {
2, 1, 2,
3, 10, 20, 30
};
并以不同的方式读取值。但我的情况确实需要指向通常在运行时从变量配置中读取的元素的指针。
最佳答案
您可以使用复合文字。研究复合文字的生命周期,以确保它们在使用时有效。
.values = (int[]){1, 2}
也许我想得太早了,但您的代码示例可能如下所示:
#define ITEM(...) { \
.count = sizeof((int[]){__VA_ARGS__})/sizeof(int), \
.values = (int[]){__VA_ARGS__}, \
}
struct example_struct items[] = {
ITEM(1, 2),
ITEM(10, 20, 30),
{0},
};
关于c - 在构建时声明指针结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73836990/