C、C++的几种参数传递方式(看完即懂)

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

         类型、个数、顺序

参数传递有两种方式

  • 传值方式(参数为整型、实型、字符型等)
  • 传地址
    - 参数为指针变量
    - 参数为引用类型(重点)
    - 参数为数组名

一、传值方式

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

程序如下:

#include<iostream>
using namespace std; 

void swap(int m, int n)
{
	int temp;
	temp=m; m=n; n=temp;
}

int main()
{
	int a,b;
	cin>>a>>b;
	swap(a,b);
	cout<<a<<endl<<b<<endl;
}

在swap函数中,将a,b分别赋值给m,n。虽然说m,n进行了值交换,但是a,b并没有进行交换,所以主函数输出时并未交换

输入a = 1,b = 2,输出仍为 a = 1, b = 2。

二、传地址方式

1. 指针变量作参数

第一种情况:形参变化影响实参

代码如下

#include<iostream>
using namespace std;

void swap(int *m, int *n)
{
	int temp;
	temp = *m; 
	*m = *n;
	*n = temp;
}

int main()
{
	int a,b,*p1,*p2;
	cin>>a>>b;
	p1 = &a;  p2 = &b;
	swap(p1,p2);
	cout<<a<<endl<<b<<endl; 
}

在该次中传递的是a,b的地址,在swap中,p1,p2分别表示指向a,b地址的地址,即*m,*n表示a,b的地址,是真正的实现了地址交换,所以主函数输出时实现了交换。

输入a = 1,b = 2,输出为 a = 2, b = 1。

第二种情况:形参变化不影响实参

代码如下:

#include<iostream>
using namespace std;

void swap(int *m, int *n)
{
	int *temp;
	temp = m;    //此函数与上一代码有所差别,
	m = n;       
	n = temp;
}

int main()
{
	int a,b,*p1,*p2;
	cin>>a>>b;
	p1 = &a;  p2 = &b;
	swap(p1,p2);
	cout<<a<<endl<<b<<endl; 
}

.

2.引用类型作参数 (重点!!!!!!)

这里涉及到c++中一个语法:引用

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

比如一个简单的例子:

#include<iostream>
using namespace std;

int main()
{
	int i = 5;
	int &j = i;    //j引用i
	i = 7;
	cout<<"i="<<i<<"j="<<j;
}

j是一个引用类型,代表i的一个替代名。i的值改变时,j的值也会跟着改变,所以会输出 i=7 j=7。

引用类型作参数代码:

#include<iostream>
using namespace std;

void swap(int& m, int& n)   //定义引用型的函数, 
{  //对形参的操作相当于对实参的操作 
	int temp;
	temp = m; 
	m = n;
	n = temp;
}

int main()
{
	int a,b;
	cin>>a>>b;
	swap(a,b);
	cout<<a<<endl<<b<<endl; 
}

在这个swap函数里,是直接对a,b操作,没有进行内存申请,提高了运行效率。

引用类型作参数的三点说明:
  1. 传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化
  2. 引用类型作形参,在内存中并没有产生实参的副本(共用一个存储单元),它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好
  3. 指针参数虽然也能达到与使用引用的效果,但在被调用函数中需要使用 “*指针变量名” 的形式进行运算,容易出错,可阅读性差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。
3.数组名作参数
  • 传递的是数组的首地址
  • 对形参数组所做的任何改变都将反映到实参数组中

代码如下:

#include<iostream>
using namespace std;

void sub(char b[])
{
	b[]= "world";
}

int main()
{
	char a[10] = "hello";
	sub(a);
	cout<<a<<endl;
}

例题:用数组作函数参数,求10个整数 的最大数

代码如下:

#include<iostream.h>
#define N 10
int max(int b[]);
void main()
{
	int a[N];
	int i,m;
	for(i = 0; i < N; i ++)
	    cin>>a[i];
	    m = max(a);
	cout<<"the max number is:"<<m;
}
int main(int b[])
{
	int i,n;
	n = b[0];
	for(i = 1; i < N; i ++)
	   if(n<b[i])
	    n = b[i];
	return n;
}
  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值