C++ 参数传递

C++ 参数传递

参数传递分为:值传递,指针传递,引用传递

一、值传递

函数定义
int add(形参 a,形参 b){
……
}
函数调用
add(实参 c,实参 d)
按值传递的过程为:首先计算出实参表达式c和d的值,接着给对应的形参变量a和b分配一个存储空间,该空间的大小等于该形参类型的,然后把以求出的实参表达式c和d的值一一存入到形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“值传递”。这种参数传递方式不会对实参造成影响,实参的值依旧是调用前的值。

二、指针传递(地址传递)

如果在函数定义时将形参说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式就是地址传递方式。

地址传递与按值传递的不同在于,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。

#include <iostream>
 
using namespace std;
 
void swap(int*, int*);
int main(){
	int a = 3, b = 4;
	cout << "a=" << a << ", b=" << b << endl;
	swap(&a, &b);
	cout << "a=" << a << ", b=" << b << endl;
	system("pause");
	return 0;
}
 
void swap(int *x, int *y){
	int t = *x;	//此处指针变量前加星号表示指针变量所指位置的内容
	*x = *y;
	*y = t;
}

三、引用传递

如果以引用为参数,则既可以使得对形参的任何操作都能改变相应的数据,又使得函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。

#include <iostream>
 
using namespace std;
 
void swap(int&, int&);
int main(){
	int a = 3, b = 4;
	cout << "a=" << a << ", b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << ", b=" << b << endl;
	system("pause");
	return 0;
}
 
void swap(int &x, int &y){
	int t = x;
	x = y;
	y = t;
}

注意

1、**C语言中,数组名作为函数参数,属于地址传递。**在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组型变量名本身只是该数组所占存储空间的首地址,函数调用时,系统不会为形参分配数组存储空间,而是仅仅分配一个存放数组地址(第一个元素地址)的存储空间,此后,将实参数组的首地址传递给形参变量。

2、const 关键字 当你的参数是作为输入参数时,你总不希望你的输入参数被修改,否则有可能产生逻辑错误,这时可以在声明函数时在参数前加上const关键字,防止在实现时意外修改函数输入,对于使用你的代码的程序员也可以告诉他们这个参数是输入,而不加const关键字的参数也可能是输出。
3、参数顺序。当同个函数名有不同参数时,如果有相同的参数尽量要把参数放在同一位置上,以方便客户端代码。

c++ 中经常使用的是常量引用,如将swap2改为:

Swap2(const int& x; const int& y)

这时将不能在函数中修改引用地址所指向的内容,具体来说,x和y将不能出现在"="的左边。

转载自:http://blog.youkuaiyun.com/cocohufei/article/details/6143476

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值