在声明期间定义结构变量

时间:2015-02-05 12:12:39

标签: c structure declaration

我一直在尝试使用C语言中的结构。

struct val{
    unsigned int a : 1 ;
}store[100] ;

现在我想将所有数组成员的值初始化为1.也就是说,我希望所有数组成员都将其变量a分配给1.我可以使用循环但是我该怎么做在宣言期间?

struct val
{
    unsigned int a=1 : 1 ;
}store[100];

我怎样才能做到这一点?上面的语法在code :: blocks中出现了错误。

3 个答案:

答案 0 :(得分:3)

struct val
{
unsigned int a : 1;
}store[100];

我最初认为你所做的是一个位域初始化。 Further research though suggested I am wrong,并且您正在尝试使用gcc的designated initializersWhat 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,您需要一个循环。