更改链接列表中struct的int值

时间:2016-10-22 05:29:47

标签: c struct linked-list

我有一个结构:

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:%d\n", p.age);

    struct person p2 = getStruct(&startPtr, 0);
    p2.age++;
    printf("Age2:%d\n", p2.age);

    struct person p3 = getStruct(&startPtr, 0);
    printf("Age3:%d\n", p3.age);

    return 0;
}

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

Age1:22
Age2:23
Age3:22

我想制作Age3 23.在插入函数中,我已经使用malloc分配内存,但为什么我不能更改第一个值?如何在不从列表中删除/添加节点的情况下更改此值?

我搜索主题,但找不到我想要的答案。所以,如果你能帮助我,我会很感激。

--- ----- EDIT 很抱歉没有发布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;
}

1 个答案:

答案 0 :(得分:2)

下面:

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

您按价值返回person ,也就是说您复制了一份。然后修改副本,而不是原始副本。你需要这样做:

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

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