引用
*定义:为对象另起一个名字。
*注意事项:
a.引用一定要将其初始化成某个变量
b.初始化后不会在引用别的变量
c.引用 只能引用变量,不能引用常量和表达式
*应用实例
1)交换数值
void swap(int& a, int& b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1, n2);
其中int &a引用n1 int &b引用n2 (倘若不加&,则无论怎麽改变交换a . b也无法影响到n1 . n2的原本状态)
2.引用作为函数返回值
int n = 4;
int & SetValue() {return n;}
int main()
{
SetValue() = 40; //相当于 int n = 40;
cout<<n;
return 0;
}//输出:40
最好不要作为局部变量的引用(类似不要返回局部变量的地址)
因为会在函数执行完毕被释放掉
*const关键字
1. 定义引用时,前面加const,即为“常引用” (引用的内容可以改变,只是不能通过常引用去修改其引用内容)
int n;
const int & r = n;
r的类型是const int &
2.常引用和非常引用的转换
const T &和T &不是同类型!!!
const T 类型的常变量和const T &类型的引用不能用来初始化T &类型的引用;
T &类型(及其常变量)的引用可初始化const T &类型(及其常变量)的引用。
例题:
答案:D
分析:C项错因是r1是指向const int,r2是指向int的 ,两数类型不符合。r1指向的数没变,可r2指向的数可以改变,而r2指向r1,相当于一个可变化的数指向一个不可变的数,那么r1也就改变了。r1是常引用,它不可改变自己的值自相矛盾。
3.定义常量指针
1)不可通过常量指针修改其指向内容
2)不能把常量指针赋值给非常量指针,反过来可以。(除非强制转换)
方法:
int n,m;
const int *p = & n;
* p = 5;//编译出错
p = & m;//ok 常量指针的指向可以变化
强制转换方法:
const * p1;
int * p2;
p1 = p2;//ok
p2 = (int *)p1;//ok 强制转换