- 1、本文档共80页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1 函数调用的简单例子 #includestdio.h void main( ) { void sum( ); /*对sum函数进行声明*/ sum( ); /*调用sum函数*/ } void sum( ) /*定义sum函数*/ { printf(“ ++++++\n”); } 8.4 函数的调用 1、函数调用的一般形式: 函数名(实参表) 如 p=fact(n); printf(“%d”,power(2,n));等 注意:实参与形参的类型、个数、顺序必须一致。 2、调用过程: 1)在调用函数时,首先将实参的值赋给形参;再将 控制流程转到被调函数; 2)然后执行被调函数。 函数的说明 被调函数必须是已存在的函数,通过“函数声明”告知编译系统关于被调函数的有关信息。 函数声明的形式:函数类型 函数名(参数表); (注意与函数定义的区别) 1、若被调函数是库函数或用户已编写的函数(与主调函数不在同一文件中),则使用前需在程序的开头用include命令将被调函数的信息包含进来。 main() /*main( )在fact()前面 */ {int n; long p; long fact(int); /*函数声明*/ scanf(%d,n); p=fact(n); /*函数调用*/ printf(\n %ld,p); } long fact( int m) /*函数定义*/ { int i; long s=1; for(i=1;i=m;i++) s*=i; return(s); /*函数返回*/ } 结论:被调函数在后,需在主调函数中先声明后调用。 8.7 数组作为函数参数 数组用作函数参数有两种形式: 一种是把数组元素(又称下标变量)作为实参使用; 另一种是把数组名作为函数的形参和实参使用。 数组元素作为函数实参 数组元素就是下标变量,它与普通变量并无区别。数组元素只能用作函数实参,其用法与普通变量完全相同:在发生函数调用时,把数组元素的值传送给形参,实现单向值传送。 例:将a[5]数组元素的值增加5倍。其中元素增加5倍由函数实现。int a[5]={1,2,3,4,5} 说明: (1)用数组元素作实参时,只要数组类型和函数的形参类型一致即可,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是按普通变量对待的。 (2)在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送,是把实参变量的值赋予形参变量。 数组名作为函数的形参和实参 数组名作函数参数时: 既可以作形参,也可以作实参。 数组名作函数参数时: 要求形参和相对应的实参都必须是类型相同的数组(或指向数组的指针变量),都必须有明确的数组说明 void main() { float aver(float a[5]) float sco[5],av; int i; printf(\n input 5 scores:\n); for(i=0;i5;i++) scanf(%f,sco[i]); av=aver(sco); /*调用函数,实参为一数组名*/ printf(average score is %5.2f\n,av); } 注意: 这种地址传送方式还是C语言本身具有的传值方式,只不过这里传送的不是实参的值,而是地址值。数组名作为参数传递的是数组的首地址。 说明: (3)用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的地址传递给形参数组。 实质:实参数组与形参数组为同一数组,即同一段内存单元。 传值调用(单向传递) :单向数据传递,对形参的改变不影响实参的值,且只能通过return语句返回最多一个值。 传地址调用(双向传递) :实参传给形参的是数据的地址,所达到的目的是:形参与实参共用同一片存储单元,对形参的改变实际上是对实参的改变,从而实现主、被调函数之间的多个数据传递。 8.8 局部变量和全局变量 1.局部变量: 在一个
文档评论(0)