Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用结构指针(使用malloc)初始化结构并在同一表达式上发送值?_C_Malloc - Fatal编程技术网

如何使用结构指针(使用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中,所有括号内的初始值设定项都必须是常量表达式。