当前位置:首页 > 开发 > 编程语言 > 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

    震惊

    震惊

编辑推荐
而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下
而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~ 下
在面试过程中,被面试官问到传值和传引用的区别,之前没有关注过这个问题,今天在网上找了一篇包含
昨天看了内存管理的有关内容,有一点了解,但不是很深入,发现之前写代码时有很多细节问题没有注意
ps:今天想写一个函数,从函数中把我需要的两个值传出来,由于传出来的值比较多,所以不考虑用return
java中没有指针,所以好像java不像其他语言那样有明确区分值传递和引用传递,在这里,刚看了一本书
值传递:传递的是实际参数的一个副本,这个值可能是基本类型,也可能是引用类型的地址. 引用传递:
java 对于 8种基本类型 和 他们的包装类型 , 外加 String 类型 ,都是 值传递,没有引用传递 。即:
来源:http://mcdelfino.blog.51cto.com/2058744/661036 值传递, 只是传递副本, 而引用传递, 是传递
因为一直对这几种函数参数的传递方式理解的不是很透彻,花了一段时间仔细捋清了他们之间的区别。这
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号