这里面出了什么问题呢?为什么这个函数没有作用

将一个新项目插入到一个链表中,我设计了这个函数但是发现没有任何作用

#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("%i\n", 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("%i\n", listStar->date);
listStar = listStar->next;
}

system("pause");

return 0;
}