当前位置:首页 > 开发 > 编程语言 > C/C++ > 正文

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

发表于: 2014-10-14   作者:墙头上一根草   来源:转载   浏览:
摘要:       c++ 函数的参数传递方式有值,指针以及引用三种方式,具体的区别是前两种其实都是值传递,只不过指针是以指针地址值的形式传递的,值传递时,形参是实参的副本,即函数中对形参的修改不会影响到实参的实际值,可以这样理解,值和指针传递的参数,实参具有不变性。但是引用是可变的,即函数中对形参的修改实参会跟着改变,值和指针的方式是C语言继承过来的,但

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

 

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号