问题描述
- 这里面出了什么问题呢?为什么这个函数没有作用
-
将一个新项目插入到一个链表中,我设计了这个函数但是发现没有任何作用#include
struct entry
{
int date;
struct entry *next;
};void insertEntry (struct entry beInsert, struct entry insert)
{beInsert.next = insert.next; insert.next = &beInsert;
}
int main(void)
{
struct entry n1, n2, n3, n4;struct entry *listStar = &n1; //开头 n1.date = 10; n1.next= &n2; n2.date = 20; n2.next = &n3; n3.date = 30; n3.next = (struct entry *)0; //结尾 n4.date = 50; insertEntry(n4, n2);
// n4.next = n2.next; 这两行是函数运行的模式,不用函数直接运行能得到结果
//n2.next = &n4;while(listStar != (struct entry *)0) { printf("%in", listStar->date); listStar = listStar->next; } return 0;
}
解决方案
其实这个问题仔细想想和我们c教程里的交换a,b值是一样的,首先,你传过去的是一个值给了形参,形参在函数里进行了一系列操作后
返回就释放掉了,相当于什么也没干。
在这里使用指针进行操作就可以了。
struct entry
{
int date;
struct entry *next;
};
void insertEntry (struct entry *beInsert, struct entry *insert)
{
beInsert->next = insert->next;
insert->next = beInsert;
}
int main(void)
{
struct entry n1, n2, n3, n4;
struct entry *listStar = &n1; //开头
n1.date = 10;
n1.next= &n2;
n2.date = 20;
n2.next = &n3;
n3.date = 30;
n3.next = (struct entry *)0; //结尾
n4.date = 50;
insertEntry(&n4, &n2);
// n4.next = n2.next; 这两行是函数运行的模式,不用函数直接运行能得到结果
//n2.next = &n4;
while(listStar != (struct entry *)0)
{
printf("%in", listStar->date);
listStar = listStar->next;
}
system("pause");
return 0;
}