函数传参(指针)问题

复习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.








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值