首页
登录 | 注册

[C语言(数据结构)] 关于传参必须注意点

今天写数据结构课程设计——顺序存储的线性表的C语言实现时遇到一个问题:
调用了ClearList(L1)后,再测试ListEmpty(L1)时,发现并没有置空表:
程序如下:

点击(此处)折叠或打开

  1. status ClearList(SqList L)
  2. {
  3.     if(L.elem==NULL)
  4.     {
  5.         return ERROR;
  6.     }
  7.     else
  8.     {
  9.         L.length = 0;
  10.         return OK;
  11.     }
  12. }

在自己苦苦思索没有结果后,果断请申椋伟来看看:
在经过单步调试后,发现不是ListEmpty()的错误,是在ClearList(L1)后,回到主程序,L1.length又变为1。
 
这时我们想到了“传参”!
在函数ClearList中,L1只是形参,回到主程序,立刻所有的数据又恢复原状。
应该传参传地址,所以修改后的代码为

点击(此处)折叠或打开

  1. status ClearList(SqList *L)
  2. {
  3.     if(L->elem==NULL)
  4.     {
  5.         return ERROR;
  6.     }
  7.     else
  8.     {
  9.         L->length = 0;
  10.         return OK;
  11.     }
  12. }
传入的参数应该为地址!
 
函数的形参和实参具有以下特点:
1. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
2. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
3. 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
4. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
牢记!

相关文章

  • 社交系统ThinkSNS Plus V2.0后端更新播报
    研发发布版本号:V2.0 更新发布时间:2018年9月20日 发布类型:功能优化.新增功能发布 ThinkSNS Plus最新体验demo:请于官网下载/安装最新版或点击在线咨询 最新官方活动:ThinkSNS+ V2.0贺中秋 9月20日 ...
  • GNU 通过 __atttribute__ 扩展的 format 属性,用来指定变参函数的参数格式检查. 我们经常实现一些自己的打印调试函数.这些打印函数往往是变参函数,那编译器编译程序时,怎么知道我们的参数格式对不对呢?因为我们实现的是变 ...
  • 1 介绍(Introduction) 1.1 为什么要有编码规范(Why Have Code Conventions) 编码规范对于程序员而言尤为重要,有以下几个原因: - 一个软件的生命周期中,80%的花费在于维护- 几乎没有任何一个软件 ...
  • 简单的入门Android开发和Java语言基础[图]
    简单的入门Android开发和Java语言基础[图] 前言: 去年年底到今年年初,我做过简单的智能家居,也实现过一些简单的直连和远程的智能家居.于是就将最简单的通信发布出来:智能家居简单实现-使用ESP8266简单实现和APP通讯 由于这方 ...
  • 在ubuntun虚拟机里安装goLang语言编程环境
    Go语言是谷歌2009发布的第二款开源编程语言. 北京时间2010年1月10日,Go语言摘得了TIOBE公布的2009年年度大奖.该奖项授予在2009年市场份额增长最多的编程语言. 本文介绍如何在ubuntu操作系统下面安装goLang. ...
  • 剑客一直说我写的blog属于阳春白雪,很少有人看懂,以后尽量向大家灌输一些基础知识. c语言通过jvm环境可以调用java类,我以前的blog写过.http://blogger.org.cn/blog/more.asp?name=hongr ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号