如何使用结构指针(使用malloc)初始化结构并在同一表达式上发送值?
这可能没有任何意义,但我想把它忘掉。我该怎么做如何使用结构指针(使用malloc)初始化结构并在同一表达式上发送值?,c,malloc,C,Malloc,这可能没有任何意义,但我想把它忘掉。我该怎么做 struct a { int n1; }; struct b { struct a *a; int n2; }; int main(void) { struct b b = { (struct a*)malloc(sizeof(struct a)) {10} , 20 }; printf("A-> %d\n B-> %d\n ", b.a->n1, b.n2 ); } 所以我想要声
struct a { int n1; };
struct b { struct a *a; int n2; };
int main(void)
{
struct b b = { (struct a*)malloc(sizeof(struct a)) {10} , 20 };
printf("A-> %d\n B-> %d\n ", b.a->n1, b.n2 );
}
所以我想要声明并初始化一个类型为b的结构,发送一个已经有值的malloc。所有这些都在同一个表达上
在oop语言中,我会这样做:
B = new B((new A()).n1=10,20);
附言:我知道我可以对它进行malloc并在另一条指令上设置一个值,我只是想知道我是否可以在初始化时这样做。您可以为此定义一个函数,并在初始化器中使用它:
struct a *a_maker(int v) {
struct a *p = malloc(sizeof(struct a));
p->n1 = v;
return p;
}
int main(void) {
struct b b = { a_maker(10) , 20 };
printf("A-> %d\n B-> %d\n ", b.a->n1, b.n2 );
return 0;
}
这可能没有任何意义
事实上,这毫无意义,毫无意义。但如果出于未知原因坚持这样做,那么最好的方法可能是使用复合文本,而不是动态内存分配
struct b b =
{
&(struct a){10},
20
};
这样,成员结构的作用域与变量b
相同,因为复合文字的作用域与局部变量的作用域相同。这样,就不需要额外的malloc/free
请注意,复合文字是C语言的多余特性。上述C代码将产生与以下代码完全相同的机器代码:
struct a a = {10};
struct b b =
{
&a,
20
};
区别在于后者更具可读性 注:此操作需要C99;在C90中,所有括号内的初始值设定项都必须是常量表达式。