在C中,定义结构时。创建新实例的正确方法是什么?我有两种看法:
struct listitem {
int val;
char * def;
struct listitem * next;
};
第一种方式(xCode说这是重新定义结构并且错误):
struct listitem* newItem = malloc(sizeof(struct listitem));
第二种方式:
listitem* newItem = malloc(sizeof(listitem));
或者,还有另一种方法吗?
答案 0 :(得分:14)
这取决于你是否想要一个指针。
最好像这样调用你的结构:
Typedef struct s_data
{
int a;
char *b;
etc..
} t_data;
之后将其设置为无指针结构:
t_data my_struct;
my_struct.a = 8;
如果你想要一个指针,你需要像那样malloc:
t_data *my_struct;
my_struct = malloc(sizeof(t_data));
my_struct->a = 8
我希望能回答你的问题
答案 1 :(得分:13)
第二种方式只有在你使用
时才有效typedef struct listitem listitem;
在声明类型为listitem
的变量之前
。您也可以静态分配结构而不是动态分配它:
struct listitem newItem;
您演示的方式就像为您要创建的每个int
执行以下操作:
int *myInt = malloc(sizeof(int));
答案 2 :(得分:2)
struct listitem newItem; // Automatic allocation
newItem.val = 5;
这是结构的快速概述: http://www.cs.usfca.edu/~wolber/SoftwareDev/C/CStructs.htm