复习C语言的时候
自己写了个简易的学生管理系统
用双链表写的
测试的时候发现删除第一个(头)的时候总是出错
后来是看了下是双链表指向问题
可是删除成功了,在输出显示的时候又出错了.
我明明把两头的指向都做好了啊.
后来才知道自己疏忽了函数传参的问题(传的是结构体指针).
比如这段代码
void test( struct LNode *pHead )
{
struct LNode * pTemp = NULL;
pHead = pTemp;
}
无返回的值,我本来是想把第一个节点删除的,然后把 头pHead重新指向.
这就是我疏忽的地方,在test函数里我传过去的参数只是一个地址.
在函数里接收参数的是一个新建的指针pHead
不是main()里的头pHead指针.
导致我在修改头pHead指向的时候只是把test函数里的pHead指向了别的数据,并没有修改到main()里的头pHead
所以在输出的时候还是用原来的头pHead这个节点指针(出错是因为原头pHead的数据被修改了)
struct LNode * test( struct LNode *pHead )
{
struct LNode * pNew = pHead;
//比如这里是删除第一个节点的代码,需要从第一指向第二就必须返回已经指向了第二个节点的pNew
return pNew;
}
这里返回pNew是一个新的节点(在函数里修改后的节点)
在main()里用pHead来接收这个返回值的话才可以正确的修改到头pHead.