引用

1. 概念

某个变量的引用,就等价于这个变量,相当于该变量的别名。

int n = 4;
int &r= n;    //r引用了n,r的类型是int &

eg:
int n = 7;
int &r= n;    //r引用了n
r=4;
cout<<r;    //输出4
cout<<n;    //输出4
n=5;
cout<<r;    //输出5

注意:

  • 定义引用时一定要将其初始化成引用某个变量。
  • 初始化后,它就一直引用该变量,不会再引用别的变量了。从一而终。
  • 引用只能引用变量,不能引用常量和表达式。

eg1:C语言中如何编写交换两个整型变量值的函数?

方法一(错误)
void swap(int a,int b)
{
    int tmp;
    tmp=a;a=b;b=tmp
}
int n1,n2;
swap(n1,n2);    //n1,n2的值不会被交换,因为a、b是形参,n1和n2是实参。形参的值修改了不会影响到实参。

方法二(正确)
void swap(int*a,int*b)    //参数是两个指针
{
    int tmp;
    tmp=*a;*a=*b;*b=tmp;    //对两个指针指向的内容进行交换
}
int n1,n2;
swap(&n1,&n2);    //参数变成了n1和n2的地址;n1,n2的值会被交换。

方法三(正确)使用了C++的引用
void swap(int &a,int &b)
{
    int tmp;
    tmp=a;a=b;b=tmp;
}
int n1,n2;
swap(n1,n2);    //n1,n2的值被交换
                //这是因为进入swap(),a就引用了n1,b就引用了n2。根据引用的概念,调用swap()函数,修改了a,b的值,则n1和n2的值也就修改了。

eg2:引用作为函数的返回值来修改全局变量

int n=4;
int & SetValue(){ return n; }    //SetValue()的返回值是一个引用,此处即引用了n
int main()
{
    SetValue()=40;    //此处对函数调用的返回值进行赋值,等价于对n进行赋值
    cout<<n;
    return 0;
}                    //输出 40

2. 常引用

  • 定义引用时,前面加const关键字,即为“常引用”
int n;
const int & r=n;    //r就是一个常引用,r的类型为const int&
  • 特点:不能通过常引用去修改其引用的内容。
int n=100;
const int&r=n;
r=200;    //编译报错,为什么呀?因为r是一个常引用,而你这一条语句是试图通过r去修改
它所引用的东西,也就是n的值,对吧?所以编译就会出错。
n=300;    //没问题

3. 常引用和非常引用的转换

results matching ""

    No results matching ""