给定以下结构
struct foo
{
int b;
int a;
int r;
};
我想从此结构创建一个新类型,例如以下
typedef struct foo * foo_t;
也就是说,foo_t
应该等于struct foo
的指针。
所以struct foo *var;
< => foo_t var;
为什么我无法从其类型中弥补此结构?
foo_t var = malloc(sizeof(*foo_t));
在编译时间丢弃错误
错误:
foo_t
之前的预期表达式
foo_t var = malloc(sizeof(((**_ foo_t)));
,因为 sizeof
的操作数必须是表达式或括号的类型名称。*foo_t
都不是。
我强烈建议不要将指针隐藏在Typedef后面。但是,您可以执行以下操作:
foo_t var = malloc(sizeof *var);
var
不是类型,因此*var
是有效的表达式。
您必须为带有type foo_t的变量而不是size sizeof(*foo_t)的变量,将大小 size> sizeof(struct foo)的内存的一部分分配。使用函数malloc,您将指向指向的部分内存(确定输入大小)的部分(确定输入大小)。您的变量 var 是type foo_t,即,指向 struct fooo 结构的指针。因此,用于变量 var 的正确语法是:
foo_t var=malloc(sizeof(struct foo));