- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
吉林大学 软件学院 C语言 课件09
第九章 再论函数 §9.1 参数 §9.1.1 指针作参数 §9.1.2 数组作参数 §9.1.3 结构体做参数 §9.2 函数值 §9.2.1 返回指针值 §9.2.2 返回结构体值 §9.3 作用域和生存期 §9.4 局部量和全局量 §9.5 递归程序设计 本章小结 §9.1 参数 一般意义上,函数的形参是指针类型 对应调用时,相应实参也应是指针类型表达式 例子: void f( int * p ){ ……… } void main(void){ int * pv;int m; pv=m; …… f(pv); …… } 例9.2.1 交换两个整数变量的值 #includestdio.h //函数原型 void swap(int a,int b); //主函数 void main() { int m=10,n=11; printf(交换前:m=%d,n=%d\n,m,n); swap(m,n); printf(交换后:m=%d,n=%d\n,m,n); } 例9.2.3 交换两个整数变量的值(交换指针指向,不能实现) #includestdio.h void swap(int *p1,int* p2) { printf(函数体内,交换前:*p1=%d,*p2=%d\n,*p1,*p2); int *p; p=p1; p1=p2; p2=p; printf(函数体内,交换后:* p1 =%d,* p2 =%d\n,*p1,*p2); } void main() { int m=10,n=11; printf(交换前:m=%d,n=%d\n,m,n); swap(m,n); printf(交换后:m=%d,n=%d\n,m,n); } §9.1.2 数组作参数 数组名实际是一个指针 所以数组名作实参传送给形参的信息实质上是一个指针值 int f ( float x [10] ) 函数调用: 实参:数组名 float a[10] ; f(a); C参数都是值方式的 数组参数传递给函数的值不是整个数组的值,而是数组名的值,也就是实参数组首地址 在函数内不给形参开辟数组存储空间,只给它开辟一个指针空间 参数传递的是实参数组名字的指针值。 例9.5a 编函数,从n个整数中找出最大数。 #includestdio.h int max_min_value(int x[], int n ){ int maxV,*p; maxV=x[0]; for( p=x+1; px+n; p++ ){ if (*p maxV) maxV = *p; } return maxV; } void main() { int a[10]={3,1,28,98,1,5,-9},max_value; max_value=max_min_value (a,10); printf(max=%d\n,max_value); } §9.1.3 结构体作函数参数 在函数之间,通过参数传送结构体值也有两种方法 方法1:用指向结构体变量的指针作函数参数 方法2:直接用结构体变量作函数参数 例8.1 (p142) : 方法1:用指向结构体变量的指针作函数参数 函数原型: void out_answer( struct bookcard *pcard0 ); 函数调用: struct bookcard{……} groupcard[100]; for(int i=0;i100;i++) out_answer( groupcard[k] ); 方法2:直接用结构体变量作函数参数 函数原型: void searchbook( struct bookcard no ); 函数调用: struct bookno no1; searchbook(no1); §9.2 函数值 函数返回类型不允许是数组类型和函数类型、共用体类型,除此之外允许一切类型,当然允许指针类型 带回指针值的函数的函数定义说明符形式是: 类型名 *函数名( 形参列表 ) float *f ( int x , int y ) f 是函数名; x 和 y 是两个 int 类型形参; 该函数的返回类型是“ float * ” 即指向 float 类型的指针。 在函数内,return 语句后边的表达式类型应该是“类型名 *” 。 若有声明 float u , *v ; 则,下述return语句都
文档评论(0)