我开始滥用此站点,但是要找到解决此类问题的示例确实很困难(所有内容都与类相关,因此我不能在项目中使用它)。
我必须模拟一个动态矢量,所以我认为简单的链接列表将是一个很好的方法。
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 *'时不兼容的类型
'OList'start = insertElement(开始,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
相同。因此,请勿破坏您的堆栈-传递指针而不是结构!