引用指针引用与指针的比较

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

    

函数是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,一边拜乔帮主的果粉自以为是果粉,其实在乔帮主的眼里是不折不扣的叛徒。

posted @ 2013-05-19 20:06  坚固66  阅读(142)  评论(0编辑  收藏  举报