C++实例:参数传递

3 篇文章 0 订阅

B站:数据结构与算法基础(青岛大学-王卓)

1、函数调用时传送给形参表的实参必须与形参三个一致

类型, 个数,顺序

2、参数传递的两种方式

(1)传值方式(参数为整型,实型,字符型等)

(2)传地址:参数为指针变量, 参数为引用类型,参数为数组名

例子:传值方式

  把实参的值传送给函数局部工作区相应的副本中,函数使用这个副本执行必要的功能。

函数修改的是副本的值,实参的值不变。

#include<iostream.h>
void swap(float m, float n)
{
	float temp;
	temp = m;
	m = n;
	n = temp;
}
void main()
{
	float a,b;
	cin>>a>>b;
	swap(a,b);
	cout<<a<<endl<<b<<endl;	//a和b的值不变
}

 

例子:传地址方式 ——指针变量做参数

形参变化影响实参:
#include<iostream.h>
void swap(float *m, float *n)
{
	float temp;		//*m 为指向空间的值a,*n为指向空间的值b
	temp = *m;		//*m == a, temp == a;
	*m = *n;		//*n == b, *m == b;即m=&b
	*n = temp;		//temp == a, *n==a;即n=&a
}				/*调换了空间内的值*/
void main()
{
	float a,b,*p1,*p2;
	cin>>a>>b;
	p1=&a; p2=&b;
	swap(p1,p2);
	cout<<a<<endl<<b<<endl;	//a和b的值改变
}
 形参变化不影响实参
#include<iostream.h>
void swap(float *m, float *n)
{
	float *temp;	
	temp = m;		//m==&a, temp == &a
	m = n;			//n==&b, m == &b 
	n = temp;		//temp == &a, n == &a;
}		/*最后swap的结果,只是改变了m,n指向的空间,即只是改变了p1,p2指向的空间*/
void main()
{
	float a,b,*p1,*p2;
	cin>>a>>b;
	p1=&a; p2=&b;
	swap(p1,p2);
	cout<<a<<endl<<b<<endl;	//a和b的值不改变
}

 

例子:传地址方式——数组名做参数

1、传递的是数组的首地址

2、对形参数组所做的任何改变都将放反映到实参数组中

#include<iostream.h>
void sub(char b[]){	//b[],储存a的首地址的数组,数组不能指定大小
    b[] = "world";	
}
void main(void){
	char a[10] = "hello";	
	sub(a);					//a指,数组首元素的地址???
	cout<<a<<endl;	//输出结果:world
}

 用数组做函数的参数,求10个整数的最大数

#include<iostream>
#define N 10
int max(int a[]);
void main(){
	int a[10];
	int i,m;
	for(i=0,i<N,i++)
		cin >> a[i];
	m=max(a);
	cout << "the max number is :"<< m;
}
int max(int b[]){
	int i,n;
	n=b[0];			
	for(i=1;i<N;i++)
		if(n<b[i]) n=b[i];	//找寻最大值,并把较大值存储在n中
	return n;
}
/*
	结果:
	1 2 3 4 5 6 7 8 9 0
	the max number is :9
*/

 

传地址方式——引用类型作参数

引用: 它是用来给一个对象提供一个替代名字

#include<iostream.h>
void main(){
	int i=5;
	int &j=i;	//j是一个引用类型,代表i的一个替代名,i值改变时,j值也跟着改变,所以会输出i=7,j=7
	i=7;
	cout << "i=" << i << "j=" << j;
}
例子:
#include<iostream.h>
void swap(float &m, float &n)	//应用类型作参数:m对a的空间的引用,a,m时同一块空间
{
	float temp;
	temp = m;
	m = n;
	n = temp;
}
void main()
{
	float a,b;
	cin>>a>>b;
	swap(a,b);
	cout<<a<<endl<<b<<endl;	//a和b的值改变
}

总结

引用类型作参数的三点说明

(1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化

(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参进行操作; 而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。 (3)指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在《《主调函数的的调用点》》处,必须用变量的地址作为实参。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值