zoukankan      html  css  js  c++  java
  • 引用指针引用与指针的比较

    工作之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一同学习一下引用指针

        

    函数是C++/C程序的基本功能单元,其重要性不言而喻。函数设计的纤细缺点很容易致使该函数被错用,所以光使函数的功能正确是不敷的。本章重点论述函数的接口设计和内部实现的一些规矩。

    函数接口的两个要素是参数和返回值。C语言中,函数的参数和返回值的传递方式有两种:值传递(pass by value)和指针传递(pass by pointer)。C++ 语言中多了引用传递(pass by reference)。由于引用传递的性质象指针传递,而使用方式却象值传递,初学者常常迷惑不解,容易引起凌乱。


        引用是C++中的观点,初学者容易把引用和指针混杂一同。一下程序中,n是m的一个引用(reference),m是被引用物(referent)。

        int m;

        int &n = m;

        n相当于m的别名(绰号),对n的任何操纵就是对m的操纵。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说长道短。所以n既不是m的拷贝,也不是指向m的指针,其实n就是m它自己。

        引用的一些规矩如下:

        (1)引用被创立的同时必须被初始化(指针则可以在任何时候被初始化)。

        (2)不能有NULL引用,引用必须与正当的存储单元关联(指针则可所以NULL)。

        (3)一旦引用被初始化,就不能转变引用的关系(指针则可以随时转变所指的对象)。

        以下示例程序中,k被初始化为i的引用。语句k = j其实不能将k修改成为j的引用,只是把k的值转变成为6。由于k是i的引用,所以i的值也变成了6。

        int i = 5;

        int j = 6;

        int &k = i;

        k = j; // k和i的值都变成了6;

        上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

        每日一道理
    站在历史的海岸漫溯那一道道历史沟渠:楚大夫沉吟泽畔,九死不悔;魏武帝扬鞭东指,壮心不已;陶渊明悠然南山,饮酒采菊……他们选择了永恒,纵然谄媚诬蔑视听,也不随其流扬其波,这是执著的选择;纵然马革裹尸,魂归狼烟,也要仰天长笑,这是豪壮的选择;纵然一身清苦,终日难饱,也愿怡然自乐,躬耕陇亩,这是高雅的选择。在一番选择中,帝王将相成其盖世伟业,贤士迁客成其千古文章。

        以下是“值传递”的示例程序。由于Func1函数体内的x是外部变量n的一份拷贝,转变x的值不会影响n, 所以n的值仍然是0。

        void Func1(int x)

        {

        x = x + 10;

        }

        …

        int n = 0;

        Func1(n);

        cout << “n = ” << n << endl; // n = 0

        以下是“指针传递”的示例程序。由于Func2函数体内的x是指向外部变量n的指针,转变该指针的内容将致使n的值转变,所以n的值成为10。

        void Func2(int *x)

        {

        (* x) = (* x) + 10;

        }

        …

        int n = 0;

        Func2(&n);

        cout << “n = ” << n << endl; // n = 10

        以下是“引用传递”的示例程序。由于Func3函数体内的x是外部变量n的引用,x和n是同一个货色,转变x即是转变n,所以n的值成为10。

        void Func3(int &x)

        {

        x = x + 10;

        }

        …

        int n = 0;

        Func3(n);

        cout << “n = ” << n << endl; // n = 10

        对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这货色?

        答案是“用恰当的工具做恰到好处的工作”。

        指针能够毫无约束地操纵内存中的如何货色,尽管指针功能强大,但是非常危险。就象一把刀,它可以用来砍树、裁纸、修指甲、剃头等等,谁敢这样用?

        如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不应有的权力。

    文章结束给大家分享下程序员的一些笑话语录:  一边用着越狱的ip,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

  • 相关阅读:
    Java Gradle
    C/C++ C++11新特性
    C/C++ C++11原子类型和内存序
    基于流的编程(Flow-Based Programming)
    算法和数据结构 筛法求素数
    数据库 悲观锁和乐观锁
    数据库 事务隔离级别
    Serverless 的 AI 写诗,程序员浪漫起来谁能顶得住啊!
    亮点前瞻 | 首届 ServerlesssDays · China 大会议程发布
    腾讯云云函数 SCF Node.js Runtime 最佳实践
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3087300.html
Copyright © 2011-2022 走看看