欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-25 18:29:58
...

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

 

       

#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
请按任意键继续. . .