我最近有一个赋值,我必须动态地为一个结构体分配内存。我使用了以下方法:
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));
干杯!