gpt4 book ai didi

更改链表中结构中的 int 值

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:55 25 4
gpt4 key购买 nike

我有一个结构:

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

也就是返回一个指针,你可以用它来修改它指向的东西。这还需要对 getStruct() 稍作更改,您尚未发布其代码。

关于更改链表中结构中的 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40188672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com