【问题标题】:C initialize pointer to array in array initializatorC在数组初始化器中初始化指向数组的指针
【发布时间】:2014-10-16 06:52:32
【问题描述】:

我需要初始化这个结构的数组:

struct a {

   int *a;
   int *b;
   int count;
};

我的代码是这样的;

struct a[] = 
{
  {{1,2},{3,4}, 2},
  {{1},{3}, 1}
};

当程序尝试访问字段的第一个元素时,这将编译,但会出现段错误。

【问题讨论】:

  • 因为你还没有为成员ab分配内存。
  • 这将编译...这根本不是有效的C。当你有真正的代码不起作用时,请回来。投票结束。
  • 我和@JensGustedt 在一起。在你的编译器中启用警告,你会立即看到这段代码真的非常非常错误。以gcc -Wall -Wextra -Werror 为例。

标签: c arrays initialization


【解决方案1】:
struct a a[] = 
{
  {(int[]){1,2},(int[]){3,4}, 2},
  {(int[]){1},(int[]){3}, 1}
};

【讨论】:

    【解决方案2】:

    您应该使用类似(添加到 BLUEPIXY 的答案)

    static int arr1[] = {1, 2};
    static int arr2[] = {3, 4};
    static int arr3[] = {1};
    static int arr4[] = {3};
    
    struct a a[] = 
    {
      {arr1, arr2, 2},
      {arr3, arr4, 1}
    };
    

    Live code here

    延伸阅读:equivalence of pointers and arrays in C

    【讨论】:

    • struct a[] = ...?真的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多