C中指针传递的一个错误--二级指针的传值问题

本文介绍了在C语言中实现查找树排序时遇到的根指针传值问题。通过具体示例解释了如何正确地修改树根指针的指向,以及在函数调用过程中指针的真实指向问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写查找树排序的代码时,遇到了根指针传值的问题。

添加一个结点的函数签名如下:

struct node * tree_insert(struct node **root ,int key);

向该函数传递树根指针,并且希望能够修改树根指针的指向,所以传递树根指针的地址。在该函数中使用一个二级指针(同为root)来保存指针树根的地址。

当向树中添加第一个结点时,需要修改树根指针的指向。在该函数中添加的新结点为ret,所以修改的语句应该为:

*root=ret;

而不是:

root=&ret;
后者修改了root的指向,此时*root不再指向树根指针;而前者则是修改树根指针的指向,使得树根指针指向新的树根ret。
 
所以在编写C代码时,应特别注意指针的真实指向。并且,还应该清楚指针传参也属于值传递。

转载于:https://www.cnblogs.com/knd2/archive/2013/03/11/2953910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值