zoukankan      html  css  js  c++  java
  • 引用和指针的区别

    1.引用相当于一个变量的别名,指针指向内存,存放的是变量的地址

    2.引用在定义之后必须被初始化,指针不需要初始化

    错误案例:int p0;  int &p1; p1=p0;

    3.引用在初始化之后的值不可以改变,指针可以改变

    这点从编译角度来分析的话, 程序在编译时分别将指针和引用添加到符号表中,符号表存的是变量和变量的地址,且符号表生成之后不会再改,指针变量的地址值是指针对象的地址(可以修改),而引用在符号表上对应的地址值为引用对象的地址值,所以引用对象不可更改

    4.sizeof (引用)返回引用所指变量的大小,sizeof(指针)返回指针的大小。

    5.通知引用和指针还经常作为函数参数来传递的,通过引用传递的参数修改后,调用该函数的实参也发生了改变,指针形参改变后实参虽然也会改变,但是和引用不同的是,指针的形参构造的时候会申请内存,引用形参不申请内存。

    两整数变量值交换的c程序如下:


    void swapint(int *a,int *b)
    {
    int temp;
    temp=*a;
    a=*b;
    *b=temp;
    }

    指针a和指针b发生变化后,传递到该函数中的实参发生变化

    使用引用机制后,以上程序的c++版本为:


    void swapint(int &a,int &b)
    {
    int temp;
    temp=a;
    a=b;
    b=temp;
    }

    引用a,b发生变化后,传递到该函数中的实参发生了变化

    6.当大型对象传递给形参时,使用引用可以提升效率,因为引用只是一个内存的别名,没有发生对象的复制

    参考链接:http://blog.sina.com.cn/s/blog_4ed9fbab01014pp3.html

  • 相关阅读:
    Valid Palindrome
    Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode: LRU Cache
    LeetCode: Max Points on a Line
    LeetCode: Evaluate Reverse Polish Notation
    LeetCode:Two Sum
    LeetCode: Binary Tree Postorder Traversal
    LeetCode:Binary Tree Maximum Path Sum
    iOS开发 入门学习总结(二)Objective-C 语法特性总结
    LeetCode: Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/runninglzw/p/4425864.html
Copyright © 2011-2022 走看看