语法something = { initial values }
只允许在初始化,其中定义了一个对象,例如:
long mem[1000] = { 1, 2, 3, 4, 5, 6 };
诸如此类的表达式x = value
is an 任务并且不能使用初始化语法。
一种替代方法是创建一个临时对象,对其进行初始化,然后将该临时对象的内容复制到目标中:
static const long temporary[] = { 1, 2, 3, 4, 5, 6 };
memcpy(test->mem, temporary, sizeof temporary);
关于问题的编辑:
数组不能被赋值;x = value
无效,如果x
是一个数组。但是,结构可以被分配,因此另一种选择是创建一个结构作为临时对象,初始化它,然后分配它:
// (After the malloc is successful.)
static const Test temporary = { { 1, 2, 3, 4, 5, 6 } };
*test = temporary;
但请注意,此代码执行了先前代码未执行的操作。我前面展示的示例仅将六个元素复制到数组中。此代码创建一个类型的临时对象Test
,其中包含 1000 个元素,其中大部分为零,并且它将所有这些元素复制到*test
。即使编译器对此进行了优化并使用一些代码来清除*test
它不是实际复制存储在内存中的零,而是比仅仅复制六个元素花费更长的时间。因此,如果您只想初始化一些元素而不关心其余元素,请使用前面的代码。如果您希望初始化所有元素(大部分元素为零),则可以使用后面的代码。 (即便如此,我会考虑替代方案,例如使用calloc
代替malloc
.)