C语言*与&在操作线性表的作用详解
在数据结构线性表一章,对线性表有这些操作方法(Operation):
/*Operation*/ Initlist(*L);/*初始化操作,建立一个空的线性表L*/ ListEmpty(L);/*判断线性表是否为空表,若线性表为空,返回值为true,否则返回false*/ ClearList(*L);/*将线性表清空*/ GetElem(L,i,*e);/*性表L中的第i个位置元素值返回给e*/ LocateElem(L,e);/*在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号;否则,返回0表示失败*/ ListInsert(*L,i,e);/*在第i个位置插入元素e*/ ListDelete(*L,i,*e);/*删除i个位置元素,并用e返回其值*/ ListLength(L);/*返回线性表L的元素个数*/
我们大致可以将上述函数分为两类,一类参数列表中没有*,例如:ListEmpty(L);
另一类在L或者e前面有个(*)号,究竟是为什么呢?
我们可以从下面这些代码得到启发
#include <stdio.h> #include <stdlib.h> void test1(int a,int b) { int c=0; c=b; b=a; a=c; printf("%d\n",a); printf("%d\n",b); } int main() { int a=1; int b=2; test1(a,b); printf("%d\n",a); printf("%d\n",b); }
运行结果如下,可见test1中a,b作为形参互相交换值对main函数中的实参并没有影响
2
1
1
2
Process returned 0 (0x0) execution time : 0.118 s
Press any key to continue.
让我们对上述代码稍作改动来观察结果
#include <stdio.h> #include <stdlib.h> void test1(int *a,int *b) { int c=0; c=*b; *b=*a; *a=c; printf("%d\n",&a); printf("%d\n",&b); } int main() { int a=1; int b=2; test1(&a,&b); printf("%d\n",a); printf("%d\n",b); return 0; }
6422000
6422008
2
1
Process returned 0 (0x0) execution time : 0.033 s
Press any key to continue.
很显然,此次的test1()方法对main函数的实参总算有了影响,因为现在的test()方法是直接对地址为6422000与6422008存储单元数据域的修改。
我们继续回到对线性表操作上来,就会恍然大悟。例如:ListInsert(*L,i,e),倘若不加*,那么L就永远作为一个局部变量留在了函数:ListInsert(L,i,e)中,没法发生实际的改变。加了*才能保证L被带出来。我们只需要在方法定义时给形参加上'*',在方法调用时给形参加上'&'就能获得预期的效果
思考:另一种解决思路:是不是可以定义一种List Insert()方法,使得返回值为已经修改好的链表L呢?
List Insert(List L,int i,ElememtType e) { /* 此处为对链表进行插入操作 */ return List;//要注意这个返回的List值已经被修改了 }
不过这也有个弊病,当插入发生在表头时,L就必须要指向新的节点,否则地址仍指向的是原来 的表头结点。解决方法也有,就是在链表第一个节点a前再插一个无意义的头节点b,这样每次想要在表头插入元素时只需插在a,b之间即可。
注:C语言中*a指向a的数据域,&则是读取a的地址。
到此这篇关于C语言*与&在操作线性表的作用详解的文章就介绍到这了,更多相关C语言线性表* &内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/weixin_53912595/article/details/120942
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了c#中(&&,||)与(&,|)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- 这篇文章主要介绍了&&:逻辑与,前后条件同时满足表达式为真||:逻辑或,前后条件只要有一个满足表达式为真,下面结合案例给大家介绍,需要的朋友可以参考下...2020-06-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
- 很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25
- 下面小编就为大家带来一篇C语言实现时间戳转日期的算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
C语言正则表达式详解 regcomp() regexec() regfree()用法详解
C语言处理正则表达式常用的函数有regcomp()、regexec()、regfree()和regerror(),这里就为大家介绍一下,需要的朋友可以参考一下啊...2020-04-25