我开始滥用此站点,但是要找到解决此类问题的示例确实很困难(所有内容都与类相关,因此我不能在项目中使用它)。

我必须模拟一个动态矢量,所以我认为简单的链接列表将是一个很好的方法。

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,而startOList *类型。

您可能想要这样:

OList *insertElement(OList *start, Offer of)
{
    OList *temp = (OList*)malloc(sizeof(OList));
    temp->element = of;
    temp->next = start;
    return temp;
}


另外,OList是一个结构,结构可能很重,而OList *占用的内存量与int相同。因此,请勿破坏您的堆栈-传递指针而不是结构!

10-06 06:03