3

我可以声明一个结构:

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

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

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

但是在我创建了数组之后,有没有什么方法可以像我上面所做的那样更改值,只使用一行,明确指定每个值而无需循环?

4

4 回答 4

8

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

C99 引入了复合文字。在此处查看 Dobbs 博士的文章: 新 C:复合文字

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)进行了测试。

您应该阅读 Dobbs 博士的文章以了解复合文字的工作原理。

于 2009-08-03T18:11:48.613 回答
2

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

memset(struct_array, 0, sizeof(struct_array));
memset(struct_array, -1, sizeof(struct_array));
于 2009-08-03T18:09:07.977 回答
0

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

于 2009-08-03T18:05:57.563 回答
0

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

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

于 2009-08-03T18:06:07.063 回答