[英]C malloc a struct from its typedef
鑒於以下結構
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
是有效的表達式。
您必須為foo_t類型而不是sizeof(* foo_t)大小的變量分配一部分大小為sizeof(struct foo)的內存。 使用函數malloc可以分配指針指向的一部分內存(確定的輸入大小)。 您的變量var是foo_t類型,即指向foo結構的指針。 因此,分配變量var的正確語法是:
foo_t var=malloc(sizeof(struct foo));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.