嵌入式C语言二级指针在链表中的应用

 更新时间:2022年04月11日 11:03:16   作者:zhzht19861011  
这篇文章主要为大家介绍了嵌入式C语言二级指针在链表中的应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

重读了两本书:Stephen A.Maguire的《编程精粹:Microsoft编写优质无错C程序秘诀》和David R. Hanson的《C语言接口与实现:创建可重用软件的技术》。两本书都有对链表的操作。

假设有如图所示的链表,链表节点的pb成员指向一个缓冲块,删除节点函数根据缓冲块的首地址,找到节点并删除节点:

链表举例

《编程精粹》使用一个变量pbiPrev来保存前一个节点位置,并且要处理删除的是第一个节点A这种边界条件:

void FreeBlockInfo(byte *pbToFree)
{
	blockinfo *pbi, *pbiPrev;
    pbiPrev = NULL;
	for(pbi = pbiHead; pbi != NULL; pbi = pbi->pbiNext)
	{
		if(fPtrEqual(pbi->pb, pbToFree)
		{
			if(pbiPrev == NULL)
				pbiHead = pbi->pbiHead;
			else
				pbiPrev->pbiNext = pbi->pbiNext;
			break;
		}
		pbiPrev = pbi;
	}
	/*如果pbi是NULL, 说明参数pbToFree非法*/
	ASSERT(pbi != NULL);
	/*在释放前破坏掉要释放内存中的内容*/
	memset(pbi, bGarbage, sizeof(blockinfo));
	free(pbi);
}

《C语言接口与实现》使用了二级指针,可以很巧妙的省掉变量pbiPrev以及边界判断:

void FreeBlockInfo(byte *pbToFree)
{
    blockinfo **ppbi, *pbiFind;
    pbiFind = NULL;
    for(ppbi = &pbiHead; *ppbi != NULL; ppbi = &(*ppbi)->pbiNext)
    {
        if(fPtrEqual((*ppbi)->pb, pbToFree)
		{
            pbiFind = *ppbi;
            *ppbi = (*ppbi)->pbiNext;
            break;
        }
    }
    /*如果pbiFind是NULL, 说明参数pbToFree非法*/
	ASSERT(pbiFind != NULL);
	/*在释放前破坏掉要释放内存中的内容*/
	memset(pbiFind, bGarbage, sizeof(blockinfo));
	free(pbiFind);
}

以上就是嵌入式C语言二级指针在链表中的应用的详细内容,更多关于嵌入式C语言二级指针链表的资料请关注脚本之家其它相关文章!

相关文章

  • Qt6.0 qproperty-*不生效原因解决分析

    Qt6.0 qproperty-*不生效原因解决分析

    这篇文章主要为大家介绍了Qt6.0 qproperty-*不生效原因解决分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C语言实现扫雷算法简易版

    C语言实现扫雷算法简易版

    这篇文章主要为大家详细介绍了C语言实现扫雷算法简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C++中priority_queue模拟实现的代码示例

    C++中priority_queue模拟实现的代码示例

    在c++语言中数据结构中的堆结构可以通过STL库中的priority_queue 优先队列来实现,这样做极大地简化了我们的工作量,这篇文章主要给大家介绍了关于C++中priority_queue模拟实现的相关资料,需要的朋友可以参考下
    2021-08-08
  • C/C++ Qt 数据库与Chart历史数据展示

    C/C++ Qt 数据库与Chart历史数据展示

    这篇文章主要介绍了Qt利用Qchart组件展示数据库中的历史数据。文中的示例代码讲解清晰,具有一定的学习和工作价值,感兴趣的小伙伴可以学习一下
    2021-12-12
  • C语言简易实现扫雷小游戏

    C语言简易实现扫雷小游戏

    这篇文章主要为大家详细介绍了C语言简易实现扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言快速排序与二分查找算法示例

    C语言快速排序与二分查找算法示例

    这篇文章主要介绍了C语言快速排序与二分查找算法,涉及C语言随机数生成、快速排序及二分查找等算法相关实现技巧,需要的朋友可以参考下
    2018-01-01
  • 实例讲解C++编程中lambda表达式的使用

    实例讲解C++编程中lambda表达式的使用

    这篇文章主要介绍了C++编程中lambda表达式的使用实例,lambda表达式特性的引入在C++11中可谓千呼万唤始出来,非常重要,需要的朋友可以参考下
    2016-01-01
  • Qt中网络编程的实现

    Qt中网络编程的实现

    本文主要介绍了Qt中网络编程的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • 基于C语言实现的扫雷游戏代码

    基于C语言实现的扫雷游戏代码

    这篇文章主要介绍了基于C语言实现的扫雷游戏代码,对于学习游戏开发的朋友有一定的借鉴价值,需要的朋友可以参考下
    2014-08-08
  • C++模拟实现vector示例代码图文讲解

    C++模拟实现vector示例代码图文讲解

    这篇文章主要介绍了C++容器Vector的模拟实现,Vector是一个能够存放任意类型的动态数组,有点类似数组,是一个连续地址空间,下文更多详细内容的介绍,需要的小伙伴可以参考一下
    2023-02-02

最新评论