您的位置:首页 > 其它

值传参、指针参数、引用参数?

2015-08-26 22:24 155 查看
一. c++中参数传递的类型
参数传递只有两种类型:值传递(指针传递也属于这种)和引用传递。
在此先说明一下,声明并初始化一个变量在内存中的过程。
如下代码:int a=65;
程序执行这一句时,内存为变量a开辟一个4字节(假定整型占4个字节)的空间,这个位置存放的值为65,这变量的名称为a(取名是为了方便记忆和操作,该 名称和存放的位置是关联在一起的)。我们知道字符'A'的asc码也为65,那在使用这个值的时候,编译系统如何知道这个65代表的是字符'A'还是整数 65呢?这很简单,因为我们定义a时指定的a数据类型为int,程序会根据变量的类型来决定如何使用它。至此,我们头脑中应该清楚一个变量应该具有4个要 素:

数据类型。无论是整型,字符型,结构体,共用体,还是对象在内存中都是以0和1的形式存在的,这时编译系统就需要根据数据类型来决定如何使用它,
变量名。即内存中某个位置的标识或者引用。
变量地址。即变量在内存中存放的地址或者位置。
变量的值。

为了说请不同类型参数传递的区别,以下是试图交换变量a和b的3个函数。

void swap1(int a, int b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void swap2(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}

void swap3(int &a, int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}

void main( )
{
int i=1, j=2;
swap1(i, j);//i,j没有交换
swap2(&i, &j);//i,j交换成功
swap3(i, j);//i,j交换成功
}

[/code]

二. 值传递
swap1和swap2都是值传递。执行swap1时,内存中会另外开辟两个空间用来存放形参a和b,a和b的值分别是i和j的副本,显然函数swap1 进行的操作是交换a和b的值,而丝毫没有影响到i和j。执行swap2时,内存同样会开辟两个空间来存放指针变量a和b,此时经参数传递后,a,b分别存 放的是i和j的地址,即&i和&j的副本,依然是值传递,然后在函数中对a和b进行间接访问操作,实际上就是对变量i和j进行操作(我知 道了i和j存放的地址,我就能真实的对它们进行操作,这就是指针),所以i和j的值交换成功。
三. 引用传递
何为引用,其实就是相当于一个别名,例如邓小平爷爷有个外号叫小钢炮,邓小平和小钢炮都是指的同一个人。当调用swap3时,其实就是分别给变量i和j取 了a和b的别名,所以对a和b的所有操作都会映射到i和j上。与引用传递为了和值传递以示区别,在定义函数时需要在参数前面加上“&”,如 swap3(int &a, int &b)。呵呵,其实就是这样简单。
源博客链接:http://m.blog.csdn.net/blog/chengjun583/11856145
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: