【问题标题】:Initialize a struct with previous declared array使用先前声明的数组初始化结构
【发布时间】:2019-11-26 16:53:38
【问题描述】:

我有以下情况:

typedef struct A {
    unsigned int a[4];
} A_;

int main() {
    unsigned int b[4] = {1,2,3,4};
    A_ a = {b};
}

这让我收到以下警告:

警告:从 'unsigned int *' 初始化 'unsigned int' 会导致 没有强制转换的指针的整数

但是制作这个A_ a = {{1,2,3,4}}; 是可以的。为什么?

【问题讨论】:

  • A_ a = {.a = b}; 为我工作。
  • 其实没有。它可以编译,但不起作用。
  • @EugeneSh.:我对此表示怀疑。你能举一个 Godbolt 的例子吗?
  • @EricPostpischil 你是对的,在你之前添加了另一条评论。不确定它的作用...ideone.com/k2xOIj
  • @EugeneSh.:它完全按照问题中显示的消息所说的那样:从没有强制转换的指针中生成一个整数。该语法使b 成为赋值表达式,因此它被转换为指向其第一个元素的指针,并用于初始化a.a 中的第一个int

标签: c arrays struct initialization initializer-list


【解决方案1】:

标准 C 不提供任何机制来用数组初始化结构成员,但用字符串字面量初始化数组除外。

相反,您可以使用结构体来初始化结构体。假设在写代码的时候你要使用的值是已知的,那么后面的结构也可以做成static const

int main(void)
{
    static const A_ InitialStructure = {{ 1, 2, 3, 4 }};
    A_ a = InitialStructure;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2021-12-31
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多