




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十二章函数参数12目标掌握函数参数按值传递掌握函数参数按指针传递掌握函数参数为数组类型掌握全局变量和局部变量3按值传递函数参数在默认情况下的传值方式按值传递是赋值过程,当修改了形参的值,不会改变实参的值4#include"stdio.h"//声明并定义函数voidchangeParaValue(intpara1){ para1++; printf("函数内形参值为:%d\n",para1);}//主函数voidmain(){ inti; i=10; printf("调用函数前值为:%d\n",i); changeParaValue(i);//调用函数,i作为实参传入
printf("调用函数后值为:%d\n",i);}5交换值功能#include"stdio.h"voidswap(inti,intj){ inttmp; tmp=i; i=j; j=tmp;}voidmain(){ intx,y; x=1; y=4; swap(x,y);}通过函数使变量的两个值交换是否能够实现我们需要另外的值传递方式6指针作为函数参数函数的参数可以是简单数据类型,也可以是指针类型。使用指针类型做函数的参数,实际向函数传递的变量的值是一个地址。7#include"stdio.h"//定义并声明函数changeValue,该函数有一个参数,该参数的类型为指针voidchangeValue(int*p){ (*p)++;//对该指针变量所指向的值进行自增}voidmain(){ inta,*pi; a=10; pi=&a; printf("调用函数前变量值:%d\n",*pi); //调用函数,由于该函数的参数为一个指针参数,所以传一个指针变量
changeValue(p); printf("调用函数后变量值:%d\n",*pi);}8#include"stdio.h"//swap函数实现了互换两个变量的值voidswap(int*px,int*py){ inttmp; tmp=*px; *px=*py; *py=tmp;}voidmain(){ intm,n,*pm,*pn; m=3; n=12; pm=&m; pn=&n; printf("调用函数前变量m=%d,n=%d\n",m,n); swap(pm,pn); printf("调用函数后变量m=%d,n=%d\n",m,n);}&m&n312&m12&n3pmmpnnpxmpyn实参的值赋给形参9数组作为函数参数数组名包含了数组中第一个元素的地址当用数组作为参数时,传递的就是数组中第一个元素的地址我们可以给函数加一个参数,该参数就是用来传递数组长度给函数的10#include"stdio.h"intgetLargest(intarr[],intlength){ intmax,i; max=arr[0]; for(i=0;i<length;i++) { if(max<arr[i]) { max=arr[i]; } } returnmax;}voidmain(){ intinputArr[10],i,max; printf("请输入10个数字。\n"); //通过循环输入10个数字
for(i=0;i<10;i++) {scanf("%d",&inputArr[i]); } //调用getLargest函数,该函数返回一个数组中的最大值
max=getLargest(inputArr,10); //输出最大值
printf("最大值为:%d",max);}01236789inputArr数组arr11voidmain(){ intarr[10],arrLength,max; //调用输入输入函数
arrLength=inputArr(arr); //得到最大值
max=getLargest(arr,arrLength); //输出最大值
printf("最大值为:%d\n",max);}#include"stdio.h"intinputArr(intarr[]){ charin,i; intcount=0 printf("请输入数字。\n"); for(i=0;i<10;i++) { scanf("%d",&arr[i]); count++; getchar(); printf("是否继续输入?(y/n)"); scanf("%c",&in); if(in=='n'||in=='N') { break;//用户停止输入,退出循环
} } returncount;//这个count的值就是用户输入的数量}intgetLargest(intarr[],intlength){ intmax,i; max=arr[0];
for(i=0;i<length;i++) { if(max<arr[i]) {max=arr[i]; } } returnmax;}12局部变量和全局变量局部变量是在函数内部定义的变量,其作用域为它所在的函数内全局变量是函数外声明的变量。其作用域为从定义变量的位置开始到程序结束,其它任何函数都能访问。13变量的作用域限于陆地限于水中限于空中14局部变量15全局变量#include"stdio.h"intgm=1,gn=3;//声明两个全局变量gm和gn//声明并定义函数f1,该函数返回类型为int,有一个int类型参数intf1(intt){intr;r=t+gm;//使用全局变量gmreturnr;}voidmain(){intx,y;x=10;y=f1(x)+gn;//使用全局变量gn}16变量的存储类型自动的(auto)静态的(static)寄存器(register)外部的(extern)17静态的(static)#include"stdio.h"voidfunc(intcount){ staticintm=0; intn=0; m=m+1; n=n+1; printf("第%d次调用函数的时候:m=%d,n=%d\n",count,m,n);}voidmain(){ inti; for(i=0;i<10;i++) {func(i);}}18总结在默认情况下,函数是按值传递函数的参数可以是我们在前面学过的简单数据类型,也可以是指针类型。使用指针类型做函数的参数,实际向函数传递的变量的值是一个地址。函数参数是数组时,实际传递的是数组的首地址。所谓的作用域就是程序中的那些部分可以访问哪些变量,哪些变量在哪些地方不能被别人访问。局部变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 流动摊位车出租合同范本
- 网络项目分包合同协议书
- 网络科技项目合作协议书
- 防水维修质保协议书范本
- 聘用检验工作人员协议书
- 珠宝行业合作合同协议书
- 矿山整体承包合同协议书
- 防水彩钢瓦采购合同范本
- 牙椅转让合同协议书模板
- 研发项目委托开发协议书
- 武进区横山桥高级中学申报四星级高中自评报告
- RB/T 228-2023食品微生物定量检测的测量不确定度评估指南
- 常见输血不良反应的诊断及处理精讲课件
- JG-T 225-2020 预应力混凝土用金属波纹管
- 2024年俄罗斯湿纸巾和湿巾行业应用与市场潜力评估
- 正规挖机安全协议责任书
- 重庆发展投资公司及所属子企业招聘笔试真题2022
- 全屋定制直播间话术
- HG-T20678-2023《化工设备衬里钢壳设计标准》
- 工程项目部安全生产治本攻坚三年行动实施方案
- 胎儿宫内窘迫的护理
评论
0/150
提交评论