我开始滥用这个网站,但是很难找到我这种问题的例子(一切都是类相关的,我不能在这个项目中使用它)。
我必须模拟一个动态向量,所以我认为我简单的链接列表将是一个很好的方法。
typedef struct OList{
Offer element;
struct OList *next;
}OList;
是
typedef struct{
int id;
char destination[32];
char type[32];
int price;
}Offer;
我正在尝试在列表的开头添加元素
OList insertElement(OList *start, Offer of)
{
OList *temp = (OList*)malloc(sizeof(OList));
temp->element = of;
temp->next = start;
start = temp;
return *start;
}
我调用它的地方:
OList *start = (OList*)malloc(sizeof(OList));
start->next = NULL;
start = insertElement(start, of);
我认为我应该返回第一个元素,因为我添加的每个元素都改变了它,但我得到以下错误:
不兼容的类型,当赋值给类型'struct OList *'时' list ' start = insertElement(start, of);
我得出这个结论是因为如果我不返回它,并且我尝试遍历列表,我只能访问我第一次声明的元素。
我快要放弃了,但同时我又很想理解这个
好,insertElement
返回OList
, start
类型为OList *
。
你可能想要这个:
OList *insertElement(OList *start, Offer of)
{
OList *temp = (OList*)malloc(sizeof(OList));
temp->element = of;
temp->next = start;
return temp;
}
此外,OList
是一个结构体,而结构体可能很重,而OList *
占用的内存量与int
相同。所以不要用栈传指针代替结构体!