我有一个结构:
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 回答
这里:
您按值返回
person
,也就是说您复制了一份 . 然后修改副本,而不是原始副本 . 你需要这样做:也就是说,返回一个指针,您可以使用它来修改它指向的内容 . 这也需要稍微更改
getStruct()
,其代码尚未发布 .