首页 文章

更改链接列表中struct的int值

提问于
浏览
0

我有一个结构:

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分配内存,但为什么我不能更改第一个值?如何在不从列表中删除/添加节点的情况下更改此值?

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

---编辑-----抱歉没有发布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 回答

  • 2

    这里:

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

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

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

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

相关问题