zoukankan      html  css  js  c++  java
  • 指针与引用的故事

    在学习C++引用是一个比较容易混淆的东西,“引用是一个变量的别名”这貌似是很多教材中对引用的定义,貌似老师还会举一些什么张三李四的例子,但是我觉得对于学习C++的人来说该清楚引用还是有必要的。

    我认为引用就是C++把指针包装了一下然后提供给我们用的一个相对安全方便的东西。

    我个人把引用理解为一个 const 指针,引用一旦初始化不能改变其指向的对象。下面举了一个例子来支持我的想法:

        int a;

        int *const conPtr = &a;

        int &ref = a;

        while (cin >> a)

        {

            cout << "&a\t" << &a << endl;

            cout << "conPtr:\t" << conPtr << endl;

            cout << "*conPtr:\t" << *conPtr << endl;

            cout << "ref\t" << ref << endl;

            cout << "&ref\t" << &ref << endl;

        }

    输出结果为:

    12
    &a      001EFC5C
    conPtr: 001EFC5C
    *conPtr:        12
    ref     12
    &ref    001EFC5C

    这段程序证实了我的想法:引用ref的本质其实就是conPtr,我们可以理解成每当我们用到ref的时候C++都已经是进行解引用操作符(*conPtr)。这样我们就可以放心的使用ref而不用担心ref指向其他的内存地址。

    顺便提一下引用较之指针的优点:

    1. 引用声明的时候必须初始化,且之后不能将其指向其他对象,这样就可以保证引用不会指向未分配的内存地址。(若指向的内存地址被释放了那么引用也会发生错误)

    2. 引用不能申明为NULL,这样就不会发生像空指针一样的危险情况。

  • 相关阅读:
    代理与反向代理
    Spring Batch 远程分区和远程分块的区别
    XWIKI部署安装
    想写一些与技术无关的
    1104报表
    ARQC与ARPC的生成和校验方法
    学习开源框架的一些总结
    linux java -version 和 javac -version 不一致
    spring boot 概念
    Unable to open socket file: target process not responding or HotSpot VM not loaded
  • 原文地址:https://www.cnblogs.com/imjustice/p/2198109.html
Copyright © 2011-2022 走看看