初始化结构中的数组值

时间:2012-03-24 22:06:57

标签: c arrays struct initialization

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

我可以通过调用

来初始化每个元素
struct->array1[0] = (unsigned char) something;
... 
struct->array1[3] = (unsigned char) something;

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

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

6 个答案:

答案 0 :(得分:26)

如果您真的是指“初始化”,因为您可以在声明变量时执行此操作,那么请确定:

struct x {
  unsigned char array1[4];
  unsigned char array2[4];
};

struct x mystruct = { 
   { 1, 2, 3, 4 },
   { 5, 6, 7, 8 }
};

答案 1 :(得分:11)

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

struct test {
    int blah;
    char arr[4];
};

struct test = { 5, { 'a', 'b', 'c', 'd' } };

答案 2 :(得分:5)

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

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

否则,如果值存储在数组中,您可以使用memcpy函数,如此

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

答案 3 :(得分:2)

是:

struct Foo
{
    unsigned char a[4];
    unsigned char b[4];
};

struct Foo x = { { 1, 2, 3, 'a' },  { 'a', 'b', 'c', 0 } };

答案 4 :(得分:2)

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

如果使用calloc()为指针分配内存,则结构内的所有内容都将使用0进行初始化。

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

memset(struct_pointer, 0, sizeof *struct_pointer);

答案 5 :(得分:0)

你也可以循环:

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

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