我一直在尝试使用C语言中的结构。
struct val{
unsigned int a : 1 ;
}store[100] ;
现在我想将所有数组成员的值初始化为1.也就是说,我希望所有数组成员都将其变量a
分配给1.我可以使用循环但是我该怎么做在宣言期间?
struct val
{
unsigned int a=1 : 1 ;
}store[100];
我怎样才能做到这一点?上面的语法在code :: blocks中出现了错误。
答案 0 :(得分:3)
struct val { unsigned int a : 1; }store[100];
我最初认为你所做的是一个位域初始化。 Further research though suggested I am wrong,并且您正在尝试使用gcc的designated initializers。 What you want to do, is not possible that way.我在你的代码中找到了另一种可以做到的方法:
typedef struct {
unsigned int a;
} val;
然后,在你想要初始化数组的地方,你会做类似的事情:
val values[100] = {[0].a = 1};
这可以通过利用gcc的这种行为来实现:
如果多次初始化相同的字段,则它具有上次初始化的值。如果任何此类重写的初始化具有副作用,则未指定副作用是否发生。目前,GCC丢弃它们并发出警告。
我的测试计划如下:
#include <stdio.h>
struct val {
unsigned int a;
};
int
main (void)
{
struct val value[100] = {[0].a = 1};
printf ("A random val's value is %d\n", value[40].a);
return 0;
}
在我的GCC 4.9.1上编译并干净利落地工作。
答案 1 :(得分:1)
这是不可能的。
您可以使用循环,或者,如果您想将所有 struct的数据成员初始化为特定值,您也可以使用memset
:
struct val {
unsigned int a : 1 ;
} store[N];
memset(store, value, N * sizeof(struct val));
答案 2 :(得分:0)
在声明struct
变量之前,您无法初始化其成员。初始化可以作为
struct val{
unsigned int a : 1;
}store[100] = {[0].a = 1} ; // Designated initializer
但它会将a
的其他元素的store
成员初始化为0
。要初始化a
的所有元素的成员store
,您需要一个循环。