代码之家  ›  专栏  ›  技术社区  ›  0fnt

C语言中动态分配结构的就地定义

  •  1
  • 0fnt  · 技术社区  · 14 年前

    如果要就地定义静态分配的结构,我会: 结构mystructure x={3,'a',0.3}; struct mystructure x=createNewMystruct(3,'a',0.3),(在这里我将定义createNewMystruct函数),但我想知道是否有其他可能的方法。

    谢谢。

    6 回复  |  直到 14 年前
        1
  •  4
  •   Steve Jessop    14 年前

    我能想到的最接近的是:

    struct mystructure *p = malloc(sizeof(*p));
    assert(p);
    *p = (const struct mystructure){3, 'a', 0.3};
    

    仅限C99,所以如果在MSVC中不起作用,请不要哭着来找我。

        2
  •  2
  •   sharptooth    14 年前

    malloc() 另一个结构并将临时变量复制到堆分配的变量上。

        3
  •  0
  •   Prof. Falken    14 年前

    不,你所描述的根本做不到。(malloc)最近的是calloc(),它将把所有分配的内存初始化为零。

        4
  •  0
  •   EricWerk    14 年前

    我不知道你为什么要这样做,但是你可以使用sizeof()函数来确定任何类型有多大,只需要malloc。当然,在这个结构中引用正确的“变量”是您自己的问题!:-)

    char* x = malloc(sizeof(int) + sizeof(char) + sizeof(float);
    
        5
  •  0
  •   onemasse    14 年前

    // Anonymous block
    {
       struct mystruct tmp = { ... };
    
       realstruct = malloc ( sizeof ( struct mystruct ) );
       if ( NULL == realstruct )
           goto error;
    
       *realstruct = tmp;
    }
    

    …而且我认为你可以在C99里做这样的事情。。。

    // After allocation
    *realstruct = (struct mystruct){ ... };
    
        6
  •  -1
  •   slebetman    14 年前

    我想知道是否还有别的办法。