函数中参数的传递方式:
优点:不会改变实参的值;
引用:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名,也就是C++系统不为引用类型变量 分配内存空间。引用主要用于函数之间的数据传递。
优点:如果实参是一个复杂的对象,重新分配内存会引起程序执行效率大大下降,而引用只传递地址,不会分配内存。
注意:1.对数组只能引用数组元素,不能引用数组(数组名本身为地址)。
2.不能定义引用的引用(引用也是地址),所以当函数的参数为引用时,引用不能作实参。
3.const引用:引用在内部存放的是被引用对象的地址,不可寻址的值是不能引用的;
当引用作为形参时,实参也不能使用不可寻址的值,更不可能进行类型转换(如:实数转换为整数)。
但是const引用不同,它是只读的,为了绝对保证不会发生误改,编译器实现const引用时,生成一个临时对象,
引用实际上指向该临时对象,但用户不能访问它。所以const引用可以实现不可寻址的值(包括字面常量)的引用,例如:
const double dval=1024; const int &ri=dval;
是正确的,编译器将其转换为:
const double dval=1024; int temp=dval; const int &ri=temp;
因有临时对象,引用和类型转换都实现了。当const引用作为形参时,实参也能使用不可寻址的值,并能进行类型转换
注意:只能对已有空间进行引用;
int a = 10;
int &b = a; //对变量引用
int *p = &a;
int *&q = p; //对指针引用
int ar[10] = {1,2,3,4,5,6,7,8,9,10};
int (&br)[10] = ar; //对数组引用
const int x = 100;
const int &y = x; //常量只能用常引用
int n = 20;
const int &m = n; //用m不能改变n
const double d = 12.34;
const int &f = d; //引用了中间的临时变量