【问题标题】:How to assign an integer array declared inside a structure directly?如何直接分配在结构内声明的整数数组?
【发布时间】:2018-09-27 06:32:51
【问题描述】:
struct data
{
    char name;
    int conn[3];
};

typedef struct data unit;
typedef unit *link;

int main()
{
    int i;
    link p[100];
    for(i=0;i<=100;i++)
    {
        p[i]=(link)malloc(sizeof(unit));
        p[i]->name='h';
        p[i]->conn[]=(int*){"1","1","1"};   **// assignment error**
    }
    for(i=0;i<=100;i++)
    {
        printf("%c\t%d\t%d\t%d\n",p[i]->name,p[i]->conn[0],p[i]->conn[1],p[i]->conn[2]); 
    }
    getch();
}

由于结构不支持初始化,有没有什么方法可以在一行代码中分配在结构中声明的这种类型的数组,而不使用 mem 分配函数,并且所有这些都是为了简单起见? 请坚持使用代码。

【问题讨论】:

  • 与您的问题无关:您声明了conn[2],但您尝试访问conn[2],如果关闭了一个。这不会有好的结局……
  • 哎呀编辑...
  • @M.M 我忘记了结构分配。您会对此做出解释并回答吗?
  • 您不能直接分配给数组。即使结构包含数组,您也可以分配整个结构,但不能将数组分配为数组。
  • 顺便说一句:for (i = 0; i &lt;= 100; i++) 的两条线也差了一个。应该是:for (i = 0; i &lt; 100; i++)

标签: c arrays initialization structure


【解决方案1】:

在 malloc 行之后你可以写:

*p[i] = (struct data){'h', {1, 1, 1}};

这使用以compound literal 作为源的结构赋值。

顺便说一句,我建议以这种方式执行 malloc 行:p[i] = malloc(sizeof *p[i]);see here 进行解释。

【讨论】:

  • @RahulKumar 请注意 M.M 版本中的 *,它在您的版本中缺失,这很重要。
  • 是的!我激动地错过了?
猜你喜欢
  • 2015-04-23
  • 2013-06-19
  • 2021-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-31
相关资源
最近更新 更多