C语言中二级指针与链表怎么应用


本文小编为大家详细介绍“C语言中二级指针与链表怎么应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言中二级指针与链表怎么应用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。简述:其实就是一个指针指向另一个指针的地址。我们都知道指针指向地址,但是指针自身也是一个变量,当然也可以被二级指针所指向。语法:形如 int x = 10; int *q = &x; int **p = & q;那么这里的q指针指向x的地址,p指针指向指针q的地址,*q可以得到x的值,*p可以得到q指针本身,**p也可以得到x的值。代码示例:运行结果:这里以带头结点的双链表为例代码解释:利用typedef对数据类型进行重命名,只要在后面遇到的 ElemType和 Status都是整型就够了。双链表结构体包含三个部分:数据域、前驱指针、后继指针,与单链表的区别就是多了一个前驱指针。然后大括号结束部分也是重命名,此时DousList和DouNode效果一样,都是结构体名,然后LinkList是指向结点的指针。具体使用:LinkList L,L是一个指针,DousList *P,P也是一个指针,属于两种创建方式。使用两种正确的创建链表形式和一种错误的形式,对比着记忆创建方法传入一级指针这种方式并不能成功创建代码演示:代码解析:这里的参数列表是 LinkList L 和 整型数据 n,L是传入的链表头结点指针,n是用来记录插入数据的个数的,在下面的for循环用做循环的次数。接下来使用malloc函数为L链表分配内存空间,malloc需要用指针来接收,左边的括号是分配的指针类型,右边的括号是分配的内存空间大小。分配空间完成之后初始化前驱和后继指针为空,数据域data记录数据的个数。ptr指针初始等于L指针,接下来进入n次循环,创建待插入结点指针me并进行分配内存空间和初始化,最后三行代码进行尾插法建立链表:尾插法:先让ptr的后继指针指向me,然后me的head指针指向ptr,这就相当于在链表头把me结点插入链表,然后ptr指向这个插入的新结点,这就保证了每次插入的结点都在上一个插入的结点之后。但是这样真的在链表中插入数据了吗 ,来看看调试结果:进入遍历的程序时,让创建的ptr指针指向L链表的后继,立马就出现了空指针异常,但是上面明明插入数据了,原因是什么呢? 很明显,这里的链表L并未完成插入数据。这是因为我们在创建链表的函数里传入的只是链表的指针L,那么在函数里这个指针只是一个副本,在这里给他增大内存空间并不会影响到实参链表,这和普通数据类型的值传递和地址传递的情况一致。我们利用传入指针地址来解决这个问题,两个方法:指针的引用和二级指针传入指针的引用函数的实现部分完全不用修改,只要形参列表加上一个引用符”&”即可。查看调试结果:同样的调试方法,传入指针的引用之后可以清晰的看到L的data等于5,也就是存了五个数据,然后对于的后继结点的值都和尾插的结果一致,最后一个结点的后继指针正好指向NULL,完全符合我们的设计的代码。传入指针的引用之后,函数里链表的空间变化会导致实参里的链表空间变化,这样做才能使插入操作完成,将结点插入到链表内。传入二级指针这个和免费云主机域名指针的引用原理一样,我主要分享给你们使用的形式注意调用的时候实参要加“&”符,例:CreateDouList(&L,n);这里形参列表的参数是 LinkList *L,和DousLIst **L效果一样,是一个二级指针。如果用到指向链表的指针就需要一次接引用操作,写成(*L)的形式。然后再去分配空间、进行初始化、赋值给链表指针ptr等操作,这样链表二级指针L的改变也会使实参的链表发生改变,可以查看调试结果。调试结果:读到这里,这篇“C语言中二级指针与链表怎么应用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: 怎么使用vue实现可搜索下拉框功能

本篇内容主要讲解“怎么使用vue实现可搜索下拉框功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用vue实现可搜索下拉框功能”吧!效果图:子组件 DROPDOWN.VUE父组件调用默认是不带搜索框,如果需要…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/19 16:57
Next 03/19 17:21

相关推荐