如何在C语言中动态分配一个结构体



我最近有一个赋值,我必须动态地为一个结构体分配内存。我使用了以下方法:

myStruct *struct1 = malloc(sizeof *struct1);

这工作得很好。然而,我不明白怎么回事。我认为struct1指针在那一点上是未初始化的,因此应该没有大小。因此,malloc(sizeof *struct1)如何返回一个有效的内存分配量?

C中的sizeof运算符不计算操作数。它只看类型。例如:

#include <stdio.h>
int main(void)
{
    int i = 0;
    printf("%zun", sizeof i++);
    printf("%dn", i);
    return 0;
}

如果你运行上面的程序,你会看到i仍然是0。

因此,在您的示例中,*struct1不被求值,它仅用于类型信息。

malloc(sizeof(*struct1))
根据您声明的结构变量的数量,

分配与结构大小相等的内存量。Sizeof用于返回struct1的大小,这是在编译时找到的。

试试这个。首先声明结构

typedef struct {
int a;
int b;
int c;
}MyStruct;

在分配内存之前,初始化一个结构变量并按给定分配内存,

MyStruct test;
printf("~~~~~ sizeofStruct: %ld", sizeof(test));
MyStruct *myAlloc = (MyStruct *)malloc(sizeof(test));
printf("~~~~~ sizeofmyAlloc: %ld", sizeof(*myAlloc));

干杯!

相关内容

  • 没有找到相关文章

最新更新