初始化结构中的数组值

我有一个结构,里面有几个数组。 这些数组的类型为unsigned char [4]。

我可以通过调用初始化每个元素

struct->array1[0] = (unsigned char) something; ... struct->array1[3] = (unsigned char) something; 

只是想知道是否有办法在一行中初始化所有4个值。

解决方案:我需要创建一个初始化所有值的临时数组,然后调用memset()将值复制到struct数组。

如果值相同,您可能会执行类似的操作

 struct->array[0] = struct->array[1] = struct->array[2] = struct->array[3] = (unsigned char) something; 

否则,如果值存储在数组中,则可以像这样使用memcpy函数

 memcpy(struct->array, some_array, sizeof(struct->array)); 

如果你的意思是“初始化”,你可以在声明变量时这样做,那么请确保:

 struct x { unsigned char array1[4]; unsigned char array2[4]; }; struct x mystruct = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }; 

创建结构时,可以使用聚合初始化对其进行初始化:

 struct test { int blah; char arr[4]; }; struct test = { 5, { 'a', 'b', 'c', 'd' } }; 

是:

 struct Foo { unsigned char a[4]; unsigned char b[4]; }; struct Foo x = { { 1, 2, 3, 'a' }, { 'a', 'b', 'c', 0 } }; 

我看到你有一个指针(是吗?)。

如果使用calloc()为指针分配内存,则struct中的所有内容都将初始化为0

否则,您需要将memset()为0或逐个元素地分配值。

 memset(struct_pointer, 0, sizeof *struct_pointer); 

你也可以循环:

  for(i = 0; i < 4; i++) the_struct->array1[i] = (unsigned char) something; 

即使你没有char,例如int(和值!= 0),这也会有效。 实际上,例如,设置一个由int构成的结构(当sizeof int大于1时)不是初始化它们的正确方法。