在C中为结构分配内存

我的任务是创建一个为结构动态分配内存的程序。 通常我们会用

x=malloc(sizeof(int)*y); 

但是,我对结构变量使用了什么? 我认为不可能这样做

 struct st x = malloc(sizeof(struct)); 

有人可以帮帮我吗? 谢谢!

我的最爱:

 #include  struct st *x = malloc(sizeof *x); 

注意:

  • x必须是指针
  • 不需要演员表
  • 包括适当的标题

你做得不对。 struct st x是一个结构,而不是一个指针。 如果你想在堆栈上分配一个,那很好。 对于在堆上分配, struct st * x = malloc(sizeof(struct st));

struct st* x = malloc( sizeof( struct st ));

这是完全可能的 – 这是正确的方法

假设你想打字

 struct st *x = malloc(sizeof(struct st)); 

PS。 即使知道所有内容的大小,也必须执行sizeof(struct),因为编译器可能会填充结构以使成员对齐。

 struct tm { int x; char y; } 

可能有不同的大小

 struct tm { char y; int x; } 

这应该做:

 struct st *x = malloc(sizeof *x); 

struct st *x = (struct st *)malloc(sizeof(struct st));

我相信,当你在struct类型上调用sizeof时,C递归地在struct的字段上调用sizeof。 所以, struct st *x = malloc(sizeof(struct st)); 只有struct st具有固定大小才能真正起作用。 这只有在你的结构中有类似变量大小的字符串的东西时才有意义,并且你不想每次都给它一个最大长度。

一般来说,

 struct st *x = malloc(sizeof(struct st)); 

作品。 有时,您将遇到可变大小的结构或“抽象”结构(想想:来自Java的抽象类),编译器会告诉您它无法确定struct st的大小。 在这些情况下,您必须手动计算大小并使用数字调用malloc,否则您将找到一个函数,该函数返回您想要的完全实现的malloc版本的结构。