当前位置:文档之家› 函数参数的传递方式

函数参数的传递方式

函数参数及其传递方式
1. 形参与实参
• 实际参数(简称实参): 调用函数时函数名后面括号中的表达式 • 形式参数(简称形参): 定义函数时函数名后面括号中的变量名
• Байду номын сангаас明:
void main( )/*求三个整数之和*/
– 实参必须有确定的值
{ int threesum( ) ; int a, b, c, sum ;
返回:
a 9
上一页
b
5
7 下一页 返回上一级
#include <stdio.h>
文件包含编译预处理命令
long sum(int a, int b); long factorial(int n);
}
不1确.2定值 1不.确72定8值
1.2
在定不义同函的数函中数指之定间的传形递参数,据在,未可出以现使函用数的调方用法时:,它们并不
占内◆存参中数的:存通储过单形元式。参只数有和在实发际生参函数数调用时,函数cube中
的形◆参返x回才值被:分用配r内et存ur单n语元句。返在回调计用算结结束果后,形参x 所占的内
函数调用转换
{ int w ; w=x+y+z ; return(w);
}
– 形参在函数被调用前不占内 存;函数调用时为形参分配内 存;调用结束,内存释放
1 上一页 下一页 返回上一级
例、计算 x3
#include <stdio.h> float cube(float x) { return(x*x*x);
形参
a product
x
} main()
返回值
实参分配变量存储空间
{ float a, product;
printf("Please input value of a:");
scanf(“%f”,&a); /* 输入1.2 给a */
product=cube(a);
printf(”Cube of %.4f is %.4f\n",a,product);
实参是常量或表达式: 实参的常量 值或表达式值传递给形参变量
#include <stdio.h>
调用前:
y: 11
void main( ) { int y=10;
printf("x=%d,\ty=%d\n",x,y); printf("swapped:\n"); swap(7, y+1); printf("x=%d,\ty=%d\n",x,y); }
实参&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
由s于ca形nf参("%与d实,%参d"指,&向a,&共b同); 的
&a
9
– 形参必须指定类型
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)
»实参和形参必须是地址数据(地址变量、常量或
表达式)
6 上一页 下一页 返回上一级
#include <stdio.h>
若实参是常量或表达式: 实参的常量地 址值或例表、达交式换的两地个址数值传递给形参变量
swap(int *p1, int *p2)
调用前:
a 5
b 9
{ int p; p=*p1; 通过指针变量接受地址值
– 特点:
地址值传 递仍然是 单向值传 递
形参和实 参的地址 值指向同 一区域
»若实参是变量: 形参与实参占用不同的内存单元, 实参变量的地址值传递给形参变量。
若实参是常量或表达式: 实参的常量地址值或表 达式的地址值传递给形参变量。
»形参与实参指向相同的存储单元
»由于形参与实参指向共同的存储单元,通过形参 改变其所指向的数据单元的数据,在主调函数中 可以通过实参访问,从而达到数据“双向”传递 的作用(参见接下来的例子)
3 上一页 下一页 返回上一级
例、交换两个数
实参是变量: 形参与实参占用不同的内存 单元,实参变量的值传递给形参变量
#include <stdio.h>
调用前:
x: 7 y: 11
void main( ) { int x=7,y=11;
printf("x=%d,\ty=%d\n",x,y); printf("swapped:\n"); swap(x,y); printf("x=%d,\ty=%d\n",x,y); }
调用时: swap:
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 上一页 下一页 返回上一级
例、交换两个数
存p储ri单ntf元(“a,=通%d过,b形=%参d\改n”变,a,其b);
通过形参交换: p2
b
所p指ri向ntf的(“s数w据ap单ped元:\的n”数); 据,
&b
5
在s主w调ap函(&数a,&中b可); 以通过实参
访p问ri,ntf所(”a以=达%d到,b数=%据d\“n"双,a,向b);” }传递的作用
swap(int a, int b) { int temp;
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) 赋地址传递方式
– 方式:函数调用时,将数据的存储地址作为参数传 递给形参
存单◆元全也局被变释量放:。外部变量
2 上一页 下一页 返回上一级
2. 参数传递方式
有两种 值传递方式 地址传递方式
(1) 赋值传递方式
– 方式:函数调用时,为形参分配单元,并将实参的值复 制到形参中;调用结束,形参单元被释放,实参单元 仍保留并维持原值。
– 特点: » 若实参是变量: 形参与实参占用不同的内存单元, 实参变量的值传递给形参变量。 若实参是常量或表达式: 实参的常量值或表达式值 传递给形参变量。 » 赋值传递方式是单向值传递。
相关主题