C++中引用的用法以及将引用作为函数的形参

在C++中引用就相当于是给变量起了一个别名,有点类似于指针,但是与指针又不同。

引用的初始化

int i;
i = 10;
//变量i的引用
//引用必须在创建的时候就要初始化,而指针可以在任意的时候初始化
//引用就相当于是给变量起了一个别名
int& i_r=i;   //i_r指向了变量i的内存地址

//我们可以查看地址
TRACE("the addr of i:%d\n", &i);
TRACE("the addr of i_r:%d\n", &i_r);  

输出如下所示:
在这里插入图片描述
我们会发现引用和变量名指向的是同一个地址。

引用赋值

i = 30;
int i2 = 0;
//i_r = &i2;     //错误:一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向另外一个对象。
i_r = 25;		 //i的值也会发生变化

引用作为函数的形参

我定义一个交换函数:

void swap(int& x, int& y)
{
	int tmp;
	tmp = x;
	x = y;
	y = tmp;
}

在main函数中调用:

int x1 = 100;
int y1 = 200;
TRACE("Before swap x1=%d y1=%d\n",x1,y1);

//因为形参是引用,所以形参会指向实参的地址单元,这样在函数内部对形参的修改,就会改变实参的值

swap(x1, y1);
TRACE("After swap x1=%d y1=%d\n", x1, y1);

输出如下:
在这里插入图片描述

函数返回值为引用

在.h头文件定义如下:

int s_i;
double d[20];
double& setdouble(int i);
int& setint();

实现如下:

double& CmfcusereferenceDlg::setdouble(int i)
{
	return d[i];
}

int& CmfcusereferenceDlg::setint()
{
	return s_i;
}

在main函数中调用如下:

//练习引用作为返回值
setdouble(1) = 30.0;   

setint() = 5.0;

我们可以看到成员变量值的变化。

指针和引用的区别:
1.引用必须在创建的时候就要初始化,而指针可以在任意的时候初始化
2.引用一旦初始化指向了一个对象,就不能再指向另外一个对象。而指针可以在任何时候指向另外一个对象


版权声明:本文为mengmeng0510原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。