函数调用时为形参分配内存

上传人:玫*** 文档编号:252815155 上传时间:2024-11-20 格式:PPT 页数:8 大小:186KB
收藏 版权申诉 举报 下载
函数调用时为形参分配内存_第1页
第1页 / 共8页
函数调用时为形参分配内存_第2页
第2页 / 共8页
函数调用时为形参分配内存_第3页
第3页 / 共8页
资源描述:

《函数调用时为形参分配内存》由会员分享,可在线阅读,更多相关《函数调用时为形参分配内存(8页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,上一页,下一页,返回上一级,说明:,实参必需有确定的值,形参必需指定类型,形参与实参类型全都,个数一样,假设形参与实参类型不全都,自动按形参类型转换函数调用转换,形参在函数被调用前不占内存;函数调用时为形参安排内存;调用完毕,内存释放,1.形参与实参,实际参数(简称实参):调用函数时函数名后面括号中的表达式,形式参数(简称形参):定义函数时函数名后面括号中的变量名,void main(,)/*求三个整数之和*/,int threesum();,int a,b,c,sum;,scanf(,“%,d,%,d,%

2、,d,”,&,a,&,b,&,c);sum=threesum(,a,b,c,);,printf(“sum is%d n”,sum);,int threesum(,int x,int y,int z,),int w;,w=x+y+z;,return(w);,函数参数及其传递方式,1,例、计算,x,3,#include,float cube(float x),return(x*x*x);,main,float a,product;,printf(“Please input value of a:“);,scanf(“%f”,/*输入1.2 给a*/,product=cube(a);,printf(

3、”Cube of%.4f is%.4fn“,a,product);,x,a,product,不确定值,不确定值,1.2,1.2,1.728,形参,实参,返回值,安排变量存储空间,在不同的函数之间传递数据,可以使用的方法:,参数,:通过形式参数和实际参数,返回值,:用,return,语句返回计算结果,全局变量,:外部变量,在定义函数中指定的形参,在未消失函数调用时,它们并不占内存中的存储单元。只有在发生函数调用时,函数cube中的形参x才被安排内存单元。在调用完毕后,形参x 所占的内存单元也被释放。,2,参数传递方式,有两种 值传递方式 地址传递方式,(1)赋值传递方式,方式:函数调用时,为形参

4、安排单元,并将实参的值复制到形参中;调用完毕,形参单元被释放,实参单元仍保存并维持原值。,特点:,假设实参是变量:形参与实参占用不同的内存单元,实参变量的值传递给形参变量。,假设实参是常量或表达式:实参的常量值或表达式值传递给形参变量。,赋值传递方式是单向值传递。,3,7,11,x,:,y,:,调用前:,调用结束:,7,11,x,:,y,:,例、交换两个数,#include,void main(),int x=7,y=11;,printf(“x=%d,ty=%dn“,x,y);,printf(“swapped:n“);,swap(x,y);,printf(“x=%d,ty=%dn“,x,y);

5、,swap(int a,int b),int temp;,temp=a;a=b;b=temp;,调用时:,7,11,a,:,b,:,7,11,x,:,y,:,swap:,7,11,x,:,y,:,11,7,a,:,b:,7,temp,实参是变量:形参与实参占用不同的内存单元,实参变量的值传递给形参变量,实参值传递给形参,4,调用结束:,7,11,y,:,例、交换两个数,#include,void main(),int y=10;,printf(“x=%d,ty=%dn“,x,y);,printf(“swapped:n“);,swap(7,y+1);,printf(“x=%d,ty=%dn“,x

6、,y);,swap(int a,int b),int temp;,temp=a;a=b;b=temp;,调用时:,7,11,a,:,b,:,7,y+1,swap:,7,11,y,:,11,7,a,:,b:,7,temp,实参是常量或表达式:实参的常量值或表达式值传递给形参变量,实参值传递给形参,11,y,:,调用前:,5,(2)赋地址传递方式,方式:函数调用时,将数据的存储地址作为参数传递给形参,特点:,假设实参是变量:形参与实参占用不同的内存单元,实参变量的地址值传递给形参变量。,假设实参是常量或表达式:实参的常量地址值或表达式的地址值传递给形参变量。,形参与实参指向一样的存储单元,由于形参

7、与实参指向共同的存储单元,通过形参转变其所指向的数据单元的数据,在主调函数中可以通过实参访问,从而到达数据“双向”传递的作用参见接下来的例子,实参和形参必需是地址数据(地址变量、常量或表达式),地址值,传递仍然是,单向值,传递,形参和实参的,地址值,指向,同一区域,6,#include,swap(int*p1,int*p2),int p;,p=*p1;,*p1=*p2;,*p2=p;,void main(),int a,b;,scanf(“%d,%d“,printf(“a=%d,b=%dn”,a,b);,printf(“swapped:n”);,swap(,printf(”a=%d,b=%dn

8、“,a,b);,例、交换两个数,a,5,9,b,调用前:,&a,&b,调用swap:,形参,p1,形参,p2,a,5,9,b,a,9,5,b,通过形参交换:,p1,&a,&b,p2,a,9,5,b,返回:,实参,&a,实参,&b,传递a、b的地址值,假设实参是常量或表达式:实参的常量地址值或表达式的地址值传递给形参变量,实参地址值传递给形参,通过指针变量承受地址值,*p2含义:访问p2指向的存储空间,由于形参与实参指向共同的存储单元,通过形参转变其所指向的数据单元的数据,在主调函数中可以通过实参访问,所以到达数据“双向”传递的作用,7,#include,long sum(int a,int b

9、);,long factorial(int n);,main(),int n1,n2;,long a;,scanf(%d,%d,a=,sum(n1,n2);,printf(a=%,1d,a);,long sum(,int a,int b,),long c1,c2;,c1=,factorial(a);,c2=,factorial(b);,return(c1+c2);,long factorial(int n),long rtn=1;,int i;,for(i=1;i=n;i+),rtn*=i;,return(rtn);,long sum(int a,int b);,long factorial(int n);,文件包含编译预处理命令,函数类型说明,函数定义,函数调用,函数调用,函数返回值,形参,实参,8,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!