c++ 值传递 指针传递 引用传递_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > c++ 值传递 指针传递 引用传递

c++ 值传递 指针传递 引用传递

 2014/10/14 21:30:15  墙头上一根草  程序员俱乐部  我要评论(0)
  • 摘要:c++函数的参数传递方式有值,指针以及引用三种方式,具体的区别是前两种其实都是值传递,只不过指针是以指针地址值的形式传递的,值传递时,形参是实参的副本,即函数中对形参的修改不会影响到实参的实际值,可以这样理解,值和指针传递的参数,实参具有不变性。但是引用是可变的,即函数中对形参的修改实参会跟着改变,值和指针的方式是C语言继承过来的,但是引用为C++新的特性,综上所述,如果函数中的形参是一个大的对象时,如果用值传递,显然会浪费内存空间,因为值传递会copy一个实参的副本
  • 标签:c++ 指针

????? c++ 函数的参数传递方式有值,指针以及引用三种方式,具体的区别是前两种其实都是值传递,只不过指针是以指针地址值的形式传递的,值传递时,形参是实参的副本,即函数中对形参的修改不会影响到实参的实际值,可以这样理解,值和指针传递的参数,实参具有不变性。但是引用是可变的,即函数中对形参的修改实参会跟着改变,值和指针的方式是C语言继承过来的,但是引用为C++新的特性,综上所述,如果函数中的形参是一个大的对象时,如果用值传递,显然会浪费内存空间,因为值传递会copy一个实参的副本,而指针同样也会copy只不过copy的是地址,相对来说小一点,但是引用最合适,因为不参加其他的操作,唯一不足的是要分清特点,如果不想修改引用的值,则最好把形参声明为const,具有不变性。一下为例子。供参考

?

???????

class="cpp">#include "stdafx.h"
#include <iostream>
using namespace std;

void swap1(int a,int b);//值传递
void swap2(int *a,int *b);//指针传递
void swap3(int &a,int &b);

int main(){
	int x = 1,y=2;
	swap1(x,y);

	cout<<"x:"<<x<<"X的原来地址为:"<<&x<<endl;

	swap2(&x,&y);

	cout<<"x的地址值:"<<&x<<endl;

	swap3(x,y);

	cout<<"x的引用值:"<<x<<endl;
	system("pause");


	return 0;
}

void swap1(int a,int  b){

	if(a !=0 && b!=0){
		int swap;

		swap =a;

		a = b;

		b=swap;

		cout<<"a:"<<a<<endl;
		
	}

}

void swap2(int *a,int  *b){

	if(a!=0&&b!=0){
		int *swap=a;
		a = b;
		b = swap;
		cout<<"a的值:"<<a<<endl;
	}
}

void swap3(int &a,int  &b){

	if(a!=0&&b!=0){
		int &swap=a;
		a = b;
		b = swap;
		cout<<"a的引用值:"<<a<<endl;
	}
}

??? 运行后的值为:

???

a:2
x:1X的原来地址为:001BF33C
a的值:001BF334
x的地址值:001BF33C
a的引用值:2
x的引用值:2
请按任意键继续. . .

?

发表评论
用户名: 匿名