我最近有一个任务,我必须为结构动态分配内存。我使用了这种方法:
myStruct *struct1 = malloc(sizeof *struct1);
这工作得很好。但是,我不明白怎么做。我认为struct1
指针此时未初始化,因此应该没有大小。那么如何malloc(sizeof *struct1)
返回有效的内存量来分配呢?
sizeof
C 中的运算符不计算操作数。它只看类型。例如:
#include <stdio.h>
int main(void)
{
int i = 0;
printf("%zu\n", sizeof i++);
printf("%d\n", 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));
干杯!