【问题标题】:Initialize values of array in a struct在结构中初始化数组的值
【发布时间】:2012-04-09 00:10:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: c arrays struct initialization


【解决方案1】:

你也可以循环:

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

即使您没有 char 但例如int (和值!= 0)。事实上,memsetting 到,比如说,1 一个由 int 构成的结构(当 sizeof int 大于 1 时)并不是初始化它们的正确方法。

【讨论】:

    【解决方案2】:

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

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

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

    memset(struct_pointer, 0, sizeof *struct_pointer);
    

    【讨论】:

    • 谢谢。 memset 部分对我有帮助。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 这是我需要做的。我曾尝试创建一个临时数组并使其相等,但我需要 memcpy。谢谢!
    【解决方案4】:

    当你创建结构体时,你可以用聚合初始化来初始化它:

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

    【讨论】:

      【解决方案5】:

      是的:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 我的意思更多的是,一旦创建了结构,就可以用数组编辑每个值。
        • Gotcha - 那么您可以使用memset() 将它们全部设置为相同的值,或者如果您希望它们不同,则可以创建一个模板数组和memcpy() 它。除此之外,您几乎所能做的就是一一分配。
        • 谢谢,memset 正是我所需要的。
        • 对于给定的正确语法,此解决方案不太可能实用。所以 -1
        猜你喜欢
        • 2012-05-02
        • 2022-01-05
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 2013-08-07
        相关资源
        最近更新 更多