最近学完数据结构线性表链式存储,老师让我们用C语言去实现。但课本上用的是C++的引用参数,只能提供大致的参考,在C中只能用指针去实现引用的功能。虽然指针更加灵活,但是指针太难啦,总是报错。总算在多次反反复复的bug后勉强实现了功能。
这个是对节点和链表的定义
对链表初始化,链表还附带了头节点,便于查找和删除
这个是链表的插入,实现的是将元素插入第i个位置之前
就是这个地方,改了好久,课本上是LinkList& L,感觉要用指针(PS:因为涉及到对它的改动),但又不知道用指针能不能改成功,就是把指针和形参等搞混了,后来也是慢慢理出来了,最后才发现真正需要的就最后一行改长度,其他的都靠L的head指针
这个是删除,将第i个元素删除
搞明白上面的插入这个就简单多了
这个是返回第i个元素的地址(PS:开始的时候也不知道能不能行,都是试出来的,因为很少写返回地址的函数)
最后再说一下我发现的一个很奇怪的地方
测试代码的时候
这样可以正常运行
但是如果在GetElem()函数前加一句printf语句就会报错
引发了异常: 读取访问权限冲突。
**ptr** 是 0xFFFFFFFFFFFFFFFF。
Debug的时候发现
经过printf函数后指针的值直接变了,才导致后面的访问错误(PS:不知道是为什么)
写这些就是为了记录一下这次经历,这次确实加深了对指针的理解,大家有知道的也可以解答一下小萌新的疑问,感谢各位大佬