首页 > 代码库 > c++之变量的引用

c++之变量的引用

  昨天耀哥在问引用的时候,当时有一点点懵。平时经常用到引用的时候就是函数的参数传递。

  引用就是某一变量的一个别名,对引用的操作与对变量直接操作完全一样,但是要注意到的是引用并没有新开辟内存空间,因此并不占内存单元。在声明引用时,必须同时对其进行初始化。

  为了简单理解引用,写了以下代码:

    int a = 10;
    int b = 20;
    std::cout << "a" << &a << std::endl;
    std::cout << "b" << &b << std::endl;
    std::cout << "________________________" << std::endl;
    int &c= a;
    std::cout << "a" << &a << std::endl;
    std::cout << "b" << &b << std::endl;
    std::cout << "c" << &c << std::endl;
    std::cout << "________________________" << std::endl;
    c = b;
    std::cout << "a" << &a << std::endl;
    std::cout << "b" << &b << std::endl;
    std::cout << "c" << &c << std::endl;
    std::cout << "________________________" << std::endl;

  代码运行结果如下:

技术分享

  不过在先前的调试中,当代码走到“c=b;”时,看到a,b,c的值均为20。小脑袋有点混乱了,一度以为变量c同时是变量a和b的引用了。是知道的,引用初始化后,并不能再把该引用作为其他变量的别名了。一度还以为是c++11对规则进行了新的修改呢,还专门去查了c++11官方文档。差点没有反应过来。仔细一想,原来”c=b;“并不是修改别名,而只是简单的整形赋值操作,逻辑上等同于“c= 20”;于是,写了上面的代码对想法进行了验证。果然发现变量c的地址还是和变量a地址相同,并没有在执行“c=b;”后,改变其地址。

c++之变量的引用