网站大量收购独家精品文档,联系QQ:2885784924

C语言函数调与用参数传递剖析.docVIP

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言函数调与用参数传递剖析

C语言函数调用与参数传递剖析 摘要:在介绍函数调用有关概念的基础上,通过例证的方法总结了函数调用过程中参数传递的方式及特点,可以更好的帮助学生理解和学习有关函数问题。 关键词:函数调用 实际参数 形式参数 参数传递 中图分类号:tp312.1 文献标识码:a 文章编号:1007-9416(2012)02-0144-02 函数是c语言中的基本组成单位,一个较大的c程序一般可分为若干个程序模块,实现某一特定功能的模块主要由函数来完成。所以,学习c语言程序设计要善于利用函数,一来可以减少重复编写程序段的工作量,二来可以方便的实现模块化程序设计。但是笔者在实际的教学过程中发现,学生在学习函数这部分知识时显的比较吃力。因为在具体使用函数时,要涉及到函数参数传递问题,而参数类型多种多样,使学生对函数问题产生了很多疑惑,根据教学实际,笔者对函数调用与参数传递问题进行了总结,以便大家对函数问题的理解。 1、主调函数与被调函数 计算机在执行c程序时总是从main函数开始,如果遇到要调用某个函数,则主函数称为主调函数,被调用者称为被调函数。一个c程序可由一个main函数和若干个其他函数构成,main函数用来解决整个问题,它调用解决小问题的其他函数,其他函数也可以相互调用。调用者就是主调函数,被调者就是被调函数,应当注意,main函数只能由系统调用。 2、实际参数与形式参数 在调用有参函数时,主调函数和被调函数之间有数据传递关系。在主调函数中进行函数调用时,函数名后面括弧中的参数称为实际参数,简称实参。在定义函数时函数名后面括弧中的变量名就是形式参数,简称形参。即实参出现在函数调用中,形参出现在函数定义中。主调函数通过函数调用将实参中的数据传递给被调函数的形参,从而实现函数间的数据传递。另外实参与形参进行数据传递时,系统要求实参与形参在数量、类型、顺序应严格保持一致,这一点在使用上要特别注意。 3、变量存储类型与作用域 主调函数和被调函数数据传递往往要通过变量进行,不同的变量类型影响数据的处理结果。c语言中变量按存储时分配的空间不同可以分为自动变量,寄存器变量,静态变量和外部变量。按变量的生命周期可以分为局部变量和全局变量,局部变量是在一个函数内部定义的变量,在存储器的动态存储区进行分配空间,作用域只在本函数内部有效,比如在主函数里定义的自动变量,寄存器变量,函数中的形式参数等都属于局部变量,在函数调用时,系统才为其分配存储空间,函数调用结束后,空间释放。而对于静态型局部变量是程序编译时由系统在存储器的静态存储区为其分配存储空间,函数调用结束后,空间不释放,其值要保留到程序退出。全局变量是在程序整个运行期间都要占用内存,所以它是全程有效,贯穿于主调函数与被调函数全过程,其值也要保留到程序退出为止。 4、参数传递的本质与属性 函数参数传递的过程,本质上是一种赋值过程即值传递过程,在调用函数之前,函数的每个实际参数将被复制,复制的值代替对应的形式参数。所以形参实际上得到的不是实参本身,而是实参的值或者实参所代表的值。因此,如果一个变量传递给一个函数,这个变量在调用环境中所存储的值并不会被函数修改,所以形参的值不会反过来影响实参,即实参与形参值传递是单向性的。这两个问题是学习和理解函数参数传递的根本,很多学习c语言的人对这两个问题不是很理解,下面举例说明函数调用时参数传递过程。 4.1 数值传递 当变量为普通变量时,函数实参可以是自动局部变量,静态局部变量,数组元素,寄存器变量,结构体变量,结构体变量成员,常量等形式,函数形参为对应类型的变量,调用函数时,由系统给形参分配存储单元,存放从实参复制过来的数值。函数调用结束后,形参存储单元释放。 例题1: #include void func1(int x) {++x; printf (“%d”,x); } int main() {int n=10; func1(n); printf (“%d”,n); return 0 ; } 例题1中main函数调用func1函数时,把实参n的值10(注意不是n)传给了形参x,x在func1函数中进行增1运算, 这时x的值发生了改变,但该值不能返回到实参n中,因为x是func1函数内部定义的变量,属于局部变量,调用函数时,系统为x变量在存储器的动态存储区分配存储空间,函数调用结束后,x变量被释放,数值被清,故n值不变,体现了传值的单向性。 4.2 地址值传递 地址值传递是指实参与形参之间传递的数据是地址,与数值传递不同的是,地址值传递的是形参接收实参地址的复制值,而不是实参值本身。另外,地址值传递方式中系统不为形式参数变量分配存储空间,这一点也与数值传递方式不同。因为函数调用完成数据传递后,实参与形参拥有相同的变量地址,它们指向同一变量单元,该变量在主调函

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档