《系统程序员成长计划》学习交流(1)-防止查找结点失败

【更新】

2012-08-17,添加问题解析以及代码下载链接

【本栏目的】学习过程中,遇到的问题,在本栏一一记录,希望可以得到指点,交流学习。

【问题描述】

有这样一段代码,

DListNode *dlist_get_node(DList *thiz, size_t index, int fail_return_last)
{
	DListNode *iter = thiz->fisrt;

	while(iter!=NULL && iter->next!=NULL && index>0)
	{
		iter = iter->next;
		index--;
	}

	if(!fail_return_last)
	{
		iter = index>0 ? NULL:iter;
	}

	return iter;

}


当fail_return_last为1时,下列代码不执行:

if(!fail_return_last)
{
	iter = index>0 ? NULL:iter;
}

当fail_return_last为0时,执行上述代码。其实就是加了一个对index的判断,看执行了index--后,index是否不再满足index>0的条件。
问题:对fail_return_last标志的判断,是起什么作用呢?希望有高手可以指点一二,相互学习。

 

【解析 2012-08-17】

这段代码实质上,是依据索引index查找结点。若fail_return_last为0,则执行检查,正常的情况下,直到index为0时,while循环才会结束。但也可能会出现失败的情况,例如iter==NULL 或 iter->next == NULL。在插入结点的过程中,如果要利用索引定位光标,可以考虑使用该函数定位,但iter == NULL或iter->next == NULL,并不会造成无法插入的情况。所以插入操作,不需要进行fail_return_last检查,方法是传参数时,将fail_return_last置位1。但类似于根据索引获取/设置/删除结点的值,显然就不允许iter == NULL的情形了。这是就需要进行fail_return_last检查。

 

 

【代码下载】

http://download.csdn.net/detail/tandesir/4492717

 

 

转载请标明出处,仅供学习交流,勿用于商业目的

Copyright @ http://blog.csdn.net/tandesir

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值