C 变量声明完成后,一次完成结构变量初始化/定义

C 变量声明完成后,一次完成结构变量初始化/定义,c,structure,definition,redefinition,C,Structure,Definition,Redefinition,我们能在结构变量的声明或定义之后一次性定义它吗?全部集中在一个大括号中,如 asd = {21,'H'}; 无法执行的任何特定原因,因为可以在声明它的同一行中定义它,例如:struct asd={21,'H'} struct test { int a; char b; }asd; asd = {21,'H'}; // error: expected an expression 要求进行C编程。需要显式类型转换: struct test { int a;

我们能在结构变量的声明或定义之后一次性定义它吗?全部集中在一个大括号中,如

asd = {21,'H'};
无法执行的任何特定原因,因为可以在声明它的同一行中定义它,例如:
struct asd={21,'H'}

struct test
{
    int a;
    char b;
}asd;  

asd = {21,'H'};   // error: expected an expression

要求进行C编程。

需要显式类型转换:

struct test
{
    int a;
    char b;
} asd;  

asd = (struct test){21,'H'};
此代码大致相当于以下代码:

const struct test initialiser = {21,'H'};
... 
asd = initialiser;
不同之处在于,编译器有一个选项,可以使用具有即时值的汇编指令优化
asd
变量的赋值,而这种优化比常量结构副本初始化更有效

作为“副作用”,此语法在
C
C++

struct test
{
    int a;
    char b;
}asd; 
test
类型的
struct
和变量
asd
的定义。在<代码>
您现在有一个名为
asd
的默认构造对象。当你试着去做

asd = {21, 'H'};
您正试图分配给
asd
和大括号列表,但该列表将不起作用,因为它没有接受初始化列表的赋值运算符

您可以在声明asd时初始化它

struct test
{
    int a;
    char b;
}asd = {21, 'H'}; 
或者任务是什么样的

asd = (struct test){21, 'H'};

如果您确实选择使用赋值,请注意,赋值必须在函数内部完成,而不是在全局空间中完成。

正如@CaptainOblivious所述:

–聚合初始化与分配不同

这意味着您以后不能在分配聚合对象时使用聚合初始化,除非是显式的或单独的,如下所示:

struct test
{
    int a;
    char b;
}asd; 
int main() {asd.a = 21; asd.b = 'H'}
另一种方法是稍后显式(这需要在main或另一个代码块中完成,否则会出现错误(
asd未命名类型)
):

您可以做的另一件事是:

struct test
{
    int a;
    char b;
}asd = {21,'H'};
上述两种方法也同样有效,如下所示:

如果要定义该类型的变量,必须包含
struct
部分,如
struct asd
。但是这个定义和初始化一起工作很好

struct test
{
    int a;
    char b;
} asd = { 21, 'H'};

因为聚合初始化与assignment.fyi不同:
auto asd={21,'H'}不起作用<代码>自动asd={21,22}可以编译,但不能满足您的要求。请选择一种语言。C不是C++,为什么C被延迟到C,这就使得这里的答案又被C++添加了。相反,他问我是哪种语言我想要答案或问这个问题。任务需要在主,否则,你会得到这个错误:<代码>错误:'ASD '不命名类型< /代码> @ ARNavBBOLAH添加了。@ LPDNN我使用的是C++语法。我用C语法更新了答案。@2501我不知道它有一个特定的名称。你能告诉我吗?@nathanoliver 1。对于struct asd[5],可以做同样的事情吗;在它宣布之后?不象*(asd+3)=(struct tt){-2',\0'};但对于数组中的所有元素,都是一行。2.可以是所有正规数组,如整数[5]={1,22,31231,5};可以在其声明后执行吗?例如:ary=(int){1,22,31231,5}@Lpdnn不幸的是,不能这样分配数组。唯一的解决方法是使数组成为结构的成员;一起分配的结构数组呢?结构asd[5];您能给我一个示例,说明将数组作为解决方法的结构的成员是什么意思吗?@lpdnn无论数组项类型如何,除了数组声明中使用的initialiser之外,不能为数组赋值。您必须使用memcpy或其他方法,即为循环中的数组[索引]赋值,或者其他人询问的任何东西,定义和初始化是否可以一次性完成,我的回答表明可以。谢谢你可爱的否决票。如果你知道的更多,请分享你的知识,这样我们都会受益。
struct test
{
    int a;
    char b;
} asd = { 21, 'H'};