C - 在一行中更改结构数组的所有值

时间:2009-08-03 18:02:07

标签: c arrays initialization structure

我可以宣布一个结构:

typedef struct
{
  int var1;
  int var2;
  int var3;
} test_t;

然后使用默认值创建这些结构结构的数组:

test_t theTest[2] =
{
   {1,2,3},
   {4,5,6}
};

但是在我创建数组之后,有没有办法像上面那样改变值,只使用一行,明确指定每个值而没有循环?

4 个答案:

答案 0 :(得分:8)

在C99中,您可以在一行中分配每个结构。我不认为您可以在一行中分配结构数组。

C99引入了复合文字。请参阅Dr. Dobbs文章:The New C: Compound Literals

theTest[0] = (test_t){7,8,9};
theTest[1] = (test_t){10,11,12};

你可以分配给这样的指针:

test_t* p; 
p = (test_t [2]){ {7,8,9}, {10,11,12} };

您也可以使用memcpy:

memcpy(theTest, (test_t [2]){ {7,8,9}, {10,11,12} }, sizeof(test_t [2]);

在linux上使用 gcc -std = c99 (版本4.2.4)进行了上述测试。

您应该阅读Dr. Dobbs文章,了解复合文字的工作原理。

答案 1 :(得分:2)

如果您想将值设置为零(或-1),可以使用memset

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));

答案 2 :(得分:0)

我认为不,你只能通过这种方式初始化数组。 但您可以使用“一行”方法更改结构的值

答案 3 :(得分:0)

如果从其他源复制变量,可以使用memcpy之类的方法直接覆盖struct值。

但是,除了设置单个元素之外,该语言不提供直接设置值的方法。