在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.引用一旦初始化指向了一个对象,就不能再指向另外一个对象。而指针可以在任何时候指向另外一个对象