Chinaunix首页 | 论坛 | 博客
  • 博客访问: 160441
  • 博文数量: 83
  • 博客积分: 3956
  • 博客等级: 中校
  • 技术积分: 663
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-24 16:29
文章分类

全部博文(83)

文章存档

2010年(83)

我的朋友

分类: C/C++

2010-10-22 13:51:06

C ++ 引用

  1. 引用概念

         对变量起另外一个名字(外号), 这个名字称为该变量的引用。如:

int max;

int &refmax = max;

refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中战胜同一地址,即同一地址两个名字。

#include <iostream>

using namespace std;

int main(void)
{
    int max;
    int &refmax = max;
    max = 5;
    refmax = 10;
    
    refmax = max + refmax;
    cout << max << endl;

    return 0;
}

对引用类型的变量,说明以下几点:

1、引用在定义的时候要初始化。

2、对引用的操作就是对被引用的变量的操作。

3、引用类型变量的初始化不能是一个常数。如:int &ref1 = 5; //是错误的。

4、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。

5、可以用动态分配的内存来初始化一个引用变量。

指针与引用的区别:

1、 指针是通过地址间接访问某个变量,而引用是通过别名直接访问某个变量。

2、 引用必须初始化,而一旦被初始化后不得再作为其他变量的别名。

当&的前面有类型符时(如int &a),它必然是对引用的声明;如果前面无类型符(如cout << &a),则是取变量的地址。

2. 引用的用途

引用的用途主要是用来作函数的参数或函数的返回值。引用作函数的形参,实际上是在被调函数中对实参变量进行操作。

#include <iostream>

using namespace std;

void change(int &x, int &y)
{
    int t;
    t = x; x = y; y = t;
}

int main(void)
{
    int a = 3, b = 5;
    change(a,b);
    cout << a << '\t' << b <<endl;
}

引用作为形参,实参是变量而不是地址,这与指针变量作形参不一样。

#include <iostream>

using namespace std;

void dd(int &x, int &y, int z)
{
    x = x + z;
    y = y - z;
    z = 10;

    cout << "(2)" << x << '\t' << y << '\t' << z <<endl;
}
int main(void)
{
    int a = 3, b = 4, c = 5, i;
    for (i = 0; i < 2; i++) {
        dd(a, b, c);
        cout<< "(1)" << a << '\t' << b << '\t' << c <<endl;
    }
}

#include <iostream>

using namespace std;

void f1(int *px) { *px += 10;}
void f2(int &xx) { xx += 10;}

int main(void)
{
    int x= 0;

    cout << "x=" << x << endl;

    f1(&x);

    cout << "x=" << x << endl;

    f2(x);

    cout << "x=" << x << endl;
}

函数的返回值为引用类型

可以把函数定义为引用类型,这时函数的返回值即为某一变量,所以可对其返回值进行赋值操作。这一点类同于函数的返回值为指针类型。

#include <iostream>

using namespace std;

int a = 4;

int &f(int x)
{
    a = a + x;
    return a;
}
int main(void)
{
    int t =5;

    cout << f(t) << endl;

    f(t) = 20;

    cout << f(t) << endl;

    t = f(t);

    cout << f(t) << endl;


}

结果:

9

25

60

阅读(285) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~