c-更改链表中结构中的int值



我有一个结构:

struct person{
     char* name;
     char* surname;
     int age;
};

我在链表的另一个结构中使用了这个结构:

struct listNode {
     struct person data;
     struct listNode *nextPtr;
};
typedef struct listNode ListNode;
typedef ListNode *ListNodePtr;

我正试图在链表中插入一个结构。之后,我想通过索引获得这个结构,并更改年龄值。总的来说,我有这些代码:

int main() {
    ListNodePtr startPtr = NULL;
    struct person p;
    p.age = 22;
    p.surname = "Pilkington";
    p.name = "Anthony";
    insert(&startPtr, p);
    printf("Age1:%dn", p.age);
    struct person p2 = getStruct(&startPtr, 0);
    p2.age++;
    printf("Age2:%dn", p2.age);
    struct person p3 = getStruct(&startPtr, 0);
    printf("Age3:%dn", p3.age);
    return 0;
}

现在,我的insert函数和getStruct函数工作正常。但我不能增加年龄值。我的输出是:

Age1:22
Age2:23
Age3:22

我想做23岁。在insert函数中,我已经用malloc分配了内存,但为什么不能更改第一个值呢?如何在不从列表中删除/添加节点的情况下更改此值?

我搜索了这个题目,但找不到我想要的答案。所以,如果你能帮我,我很感激。

---编辑-----很抱歉没有发布getStruct方法,我在下面添加它:

struct person getStruct(ListNodePtr *sPtr, int index) {
    ListNodePtr currentPtr;
    struct person c;
    int counter = 0;
    currentPtr = *sPtr;
    while (currentPtr != NULL) {
        if (counter == index) {
            c = currentPtr->data;
        }
        counter++;
        currentPtr = currentPtr->nextPtr;
    }
    return c;
}

此处:

struct person p2 = getStruct(&startPtr, 0);

您通过值返回一个person,也就是说您制作了一个副本。然后修改副本,而不是原始副本。你需要这样做:

struct person *p2 = getStruct(&startPtr, 0);
p2->age++;
printf("Age2:%dn", p2->age);

也就是说,返回一个指针,您可以用它来修改它指向的内容。这还需要对getStruct()进行轻微更改,您尚未发布其代码。

相关内容

  • 没有找到相关文章

最新更新