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'};