同样的C++中的引用也是非常容易搞混的一节内容 这里我自己做个总结给以后不熟悉引用的那个我复习
1.指针与引用的区别:
- 不存在空引用。引用必须能够标识一块合法的内存。不能用int & 引用名=NULL
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。但是 指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化且必须指向一个变量或者对象而不能是常量(如 int &a=10是不对的),(即创建与初始化必须在一个步骤中完成)但是指针可以在任何时间被初始化。
2.引用的用途:
C++之所以增加引用类型, 主要是把它作为函数参数,以扩充函数传递数据的功能。
当调用函数时,有三种向函数传递参数的方式
i.传值调用:该方法把参数的实际值复制给函数的形式参数(形参)。在这种情况下,修改函数内的形式参数对实际参数没有影响。
ii.指针调用:该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
iii.引用调用:该方法把参数的引用复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
3.还有将引用作为返回值的,虽然我知道这是什么意思, 但是我不知道具体有什么用 ,节省内存??
用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。(别人说的)
返回引用的例子如下 :(摘自别处)
#include <iostream>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues( int i )
{
return vals[i]; // 返回第 i 个元素的引用
}
// 要调用上面定义函数的主函数
int main ()
{
cout << "改变前的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // 改变第 2 个元素
setValues(3) = 70.8; // 改变第 4 个元素
cout << "改变后的值" << endl;
for ( int i = 0; i < 5; i++ )
{
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return 0;
}
结果:
改变前的值
vals[0] = 10.1
vals[1] = 12.6
vals[2] = 33.1
vals[3] = 24.1
vals[4] = 50
改变后的值
vals[0] = 10.1
vals[1] = 20.23
vals[2] = 33.1
vals[3] = 70.8
vals[4] = 50
应付考试前两点应该够了