C 使用先前声明的数组初始化结构

C 使用先前声明的数组初始化结构,c,arrays,struct,initialization,initializer-list,C,Arrays,Struct,Initialization,Initializer List,我有以下情况: 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}正常。为什么?除了使用字符串文本初始化数组外,标准C不提供任何用数组初始化结构成员的

我有以下情况:

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}正常。为什么?

除了使用字符串文本初始化数组外,标准C不提供任何用数组初始化结构成员的机制

相反,您可以使用结构初始化结构。假设在编写代码时您要使用的值是已知的,那么也可以将后一种结构设置为
static const

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

A_A={.A=b}对我有用。实际上没有。它可以编译,但不起作用。@EugeneSh:我怀疑。”。“你能用Godbolt举个例子吗?”@EricPostpischil你说得对,在你的评论之前又加了一条评论。不确定它是做什么的…@EugeneSh.:它完全按照问题中显示的消息所做的:从指针生成一个整数,而不使用强制转换。语法使
b
成为赋值表达式,因此它被转换为指向其第一个元素的指针,用于初始化
a.a
中的第一个
int