我开始滥用这个网站,但很难找到我的问题的例子(一切都与课程有关,我不能在这个项目中使用它)。< / p>
我必须模拟动态矢量,所以我认为简单的链接列表是一个很好的方法。
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);
我认为我应该返回第一个元素,因为我使用我添加的每个元素更改它,但是我收到以下错误:
分配到类型&#39; struct OList *&#39;时,不兼容的类型从类型 &#39; OList&#39; start = insertElement(start,of);
我得出了这个结论,因为如果我没有返回它并且我试图通过列表,我只能访问我最初声明的元素。
我是放弃了,但与此同时我真的很想理解这一点。
答案 0 :(得分:1)
好吧,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
的内存量相同。所以不要吹你的堆栈 - 传递指针而不是结构!