zoukankan      html  css  js  c++  java
  • 温习C/C++笔记(2)——指针和引用的区别

    首先看一段代码以及运行结果,我将结合该段代码讲解指针和引用的两点区别:

    //
    //  main.cpp
    //  testC++02
    //
    //  Created by fei dou on 12-7-29.
    //  Copyright (c) 2012年 vrlab. All rights reserved.
    //
    
    #include <iostream>
    #include <string>
    using namespace std; 
    
    int main (int argc, const char * argv[])
    {
    
        string str1 = "I am a simple string object";
        string str2 = "I am a simple string object too";
        string *sPtr = &str1;
        string &sRef = str1;
        cout << "原始内容:" << endl;
        cout << *sPtr << endl;
        cout << str1 << endl;
        //进行指针赋值之后的结果
        cout << "进行指针赋值之后的结果:" << endl;
        sPtr = &str2;
        cout << *sPtr << endl;
        cout << str1 << endl;
        //进行引用赋值之后的结果
        cout << "进行引用赋值之后的结果:" << endl; 
        sRef = str2;
        cout << sRef << endl;
        cout << str1 << endl;
        return 0;
    }
    


    其运行结果如下:



    本段程序很简单,不过当你读了代码和输出结果之后可能觉得第三组结果有点怪异,

    相信很多人会觉得第三组第二行的输出结果应该是"I am a simple string object",而不是

    “I am a simple string object too”。

    但是,结果为什么不是我们想象的那样啊?哪里出了问题?(当然了,如果你已经知道原因,就没有必要阅读下面的文字了微笑

    问题的原因就在于C++ 中指针和引用的微妙差别,而这的差别主要有两点:


    1.引用总是指向某一个对象,定义引用时不进行初始化是错误的。而且其关联对象是不可以改变的,始终与定义初始化的时候一致。

    2.赋值行为的差异,给引用赋值的结果是修改该引用所关联的对象的值,而不是将引用与另外一个对象关联。


    这里,第二条有点让人迷惑,搞不清楚最后到底是修改了什么。好的,现在结合上面的代码来解释:

    sRef = str2;
        cout << sRef << endl;
        cout << str1 << endl;
    这里,首先sRef = str2;语句是一个对引用的赋值,sRef是字符串str1的引用。执行赋值操作以后我们发现

    cout << str1 << endl;的输出结果变成了str2的内容,而不再是str1本来的内容,这是因为对于引用的赋值

    操作修改了str1对象的值,而不是让sRef和str2关联。

    最终的结果就是sRef仍然是和str1关联,同时str1的内容被修改为str2。

    这就是上面第二天的区别,或许现在你已经有点头绪了,也希望这篇短文章能给你

    带来一些帮助。


    今天就先写到这里了,如果大家觉得本文有什么不妥之处,欢迎批评指正,望与大家一起进步!


  • 相关阅读:
    大型网站架构之分布式消息队列【转】
    Jpa生成mysql注释,添加ODBC数据源导入数据到EA
    Spring boot框架项目,使用maven命令将配置文件打包到jar包外,项目运行读取jar外配置文件
    spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
    关于博主
    [School Life] 骗你去努力
    [OI
    洛谷P4994【终于结束的起点】
    [OI系列]在考场千万不能犯的错误
    [OI
  • 原文地址:https://www.cnblogs.com/dancingrain/p/3405228.html
Copyright © 2011-2022 走看看