函数参数的传递方式PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 说明:
– 实参必须有确定的值
– 形参必须指定类型
– 形参与实参类型一致,个数 相同
– 若形参与实参类型不一致, 自动按形参类型转换——— 函数调用转换
– 形参在函数被调用前不占内 存;函数调用时为形参分配内 存;调用结束,内存释放
1 上一页 下一页 返回上一级
例、计算 x3
#include <stdio.h>
temp=a; a=b; b=temp; }
调用时: swap:
调用结束:
7
y+1
实参值传递给形参
a: 7 b: 11
7 y: 11
a: 11 b: 7 temp 7
7
y: 11
5 上一页 下一页 返回上一级
(2) 赋地址传递方式
– 方式:函数调用时,将数据的存储地址作为参数传 递给形参
– 特点:
float cube(float x)
{ return(x*x*x);
} main()
返回值
形参
a
product
x
实参分配变量存储空间
{ float a, product;
printf("Please input value of a:");
scanf(“%f”,&a); /* 输入1.2 给a */
的形◆参返x回才值被:分用配r内et存ur单n语元句。返在回调计用算结结束果后,形参x 所占的内
存单◆元全也局被变释量放:。外部变量
2 上一页 下一页 返回上一级
2. 参数传递方式
有两种 值传递方式 地址传递方式
(1) 赋值传递方式
– 方式:函数调用时,为形参分配单元,并将实参的值复 制到形参中;调用结束,形参单元被释放,实参单元 仍保留并维持原值。
地址值传 递仍然是 单向值传 递
形参和实 参的地址 值指向同 一区域
»若实参是变量: 形参与实参占用不同的内存单元, 实参变量的地址值传递给形参变量。
若实参是常量或表达式: 实参的常量地址值或表 达式的地址值传递给形参变量。
»形参与实参指向相同的存储单元
»由于形参与实参指向共同的存储单元,通过形参 改变其所指向的数据单元的数据,在主调函数中 可以通过实参访问,从而达到数据“双向”传递 的作用(参见接下来的例子)
返回:
a 9
上一页
b
5
7 下一页 返回上一级
结束语
当你尽了自己的最大努力时,失败也是伟大的, 所以不要放弃,坚持就是正确的。
When You Do Your Best, Failure Is Great, So Don'T Give Up, Stick To The End
#include <stdio.h>
调用前:
x: 7 y: 11
void main( ) { int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y); printf("s:\n"); swap(x,y); printf("x=%d,\ty=%d\n",x,y); }
调用时: swap:
»实参和形参必须是地址数据(地址变量、常量或
表达式)
6 上一页 下一页 返回上一级
#include <stdio.h>
若实参是常量或表达式: 实参的常量地 址值或例表、达交式换的两地个址数值传递给形参变量
swap(int *p1, int *p2)
调用前:
a 5
b 9
{ int p; p=*p1; 通过指针变量接受地址值
函数参数及其传递方式
1. 形参与实参
• 实际参数(简称实参): 调用函数时函数名后面括号中的表达式 • 形式参数(简称形参): 定义函数时函数名后面括号中的变量名
void main( )/*求三个整数之和*/ { int threesum( ) ;
int a, b, c, sum ; scanf(“%d,%d ,%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);
– 特点: » 若实参是变量: 形参与实参占用不同的内存单元, 实参变量的值传递给形参变量。 若实参是常量或表达式: 实参的常量值或表达式值 传递给形参变量。 » 赋值传递方式是单向值传递。
3 上一页 下一页 返回上一级
例、交换两个数
实参是变量: 形参与实参占用不同的内存 单元,实参变量的值传递给形参变量
存储pri单ntf元(“,a通=%过d,形b=参%改d\n变”其,a,b);通过形参交换: p2
所指pri向ntf的(“数s:据\n单”元); 的数据,
&b
b 5
在主sw调ap函(&数a,&中b可);以通过实参
访问pri,ntf所(”以a达=%到d,数b=据%“d\n双",a向,b”); }传递的作用
实参&a
形参p1
a
*p1=*p2;
&a
5
}
*p2=p;
*p2含义:访问p2指向的 存储空间
调用swap: 形参p2 实参地址值传递给形参 &b
b 9
void main( ) 传递a、b的地址值
实参&b
{ int a,b;
p1
a
由于sca形nf参("%与d实,%参d"指,&向a,&共b同); 的
&a
9
#include <stdio.h>
调用前:
y: 11
void main( ) { int y=10;
printf("x=%d,\ty=%d\n",x,y); printf("s:\n"); swap(7, y+1); printf("x=%d,\ty=%d\n",x,y); }
swap(int a, int b) { int temp;
x: 7 y: 11
实参值传递给形参
a: 7 b: 11 x: 7 y: 11
a: 11 b: 7
swap(int a, int b) { int temp;
temp=a; a=b; b=temp; }
调用结束:
temp 7
x: 7
y: 11
4 上一页 下一页 返回上一级
例、交换两个数
实参是常量或表达式: 实参的常量 值或表达式值传递给形参变量
product=cube(a);
Fra Baidu bibliotek
printf(”Cube of %.4f is %.4f\n",a,product);
}
不1确.2定值 1不.确72定8值
1.2
在定不义同函的数函中数指之定间的传形递参数,据在,未可出以现使函用数的调方用法时:,它们并不
占内◆存参中数的:存通储过单形元式。参只数有和在实发际生参函数数调用时,函数cube中