zoukankan      html  css  js  c++  java
  • 指针和引用初理解

    1. 指针是变量,指针变量的值是内存单元的地址,也可以说指针是内存单元的地址。

    如下图所示:指针p指向变量n. p的值就是变量n的地址。我们只要掌握了变量n的地址(也就是它的指针p),就可以在任何地方对其内存单元进行操作。

    也可以这么理解,指针变量也是一个变量。

    指针变量的值:p = 0x22f.               是另一个变量n的地址

    指针变量的地址:&p = 0xff68.         是二维指针变量的的值 ,假设int **p2=&p

    指针变量指向的值: *p=3.               是另一变量的值3

    int n=3;    int *p=&n;    *p=4;     cout<<n<<endl;

    2.引用是某块内存的别名。

    引用是C++中的概念,注意这里的&不是取地址。以下程序中,n 是m 的一个引用(reference),m是被引用物(referent)。

    int m;    int &n=m;

     n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。例如有人名叫王小毛,他的绰号是“三毛”。说“三毛”怎么怎么的,其实就是对王小毛说三道四。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n就是m 它自己。-----林锐高质量C++编程

    int m=3;   int &n=m;    n=5;   cout<<m<<endl;

     3.指针与引用的区别

    1、非空区别。任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象,但指针可以为空;因此如果使用一个变量让他指向一个对象,但是该变量某些时候可不能不指向任何对象,应该把变量声明为指针。如果,变量不为空,可以把变量声明为引用。


    2,合法性区别。在使用引用指尖不需要测试它的合法性。相反,在使用指针之前最好先先进行测试,避免其指向NULL。


    3.可修改区别。指针可以被修改指向另外一个不同的对象,而引用则总是指向其在初始化时被指定的对象。
    #include<iostream>
    using namespace std;
    int main(void)
    {
        int a=10,b=1000;
        int &rInt=a;//rInt引用a,rInt等于10;
        rInt=b;//将b赋值给变量a,注意这里不非让rInt改变初衷引用b
        rInt=30;//改变rInt还是改变a.
        cout<<"a="<<a<<endl;
    
        int k=10,m=20;
        int *p=&k;//p指向a,可以通过操作p,来改变k
        p=&m;//改变了p的指向,之后改变p就对k,没有影响了。
        *p=30;
        cout<<"k="<<k<<endl;//k还是10;
        getchar();
    }
    4.应用区别。如果总是指向一个对象并且一旦指向后就不会改变指向,此时应该使用引用。反之推荐使用指针。

    总之:引用是变量的别名,不为空,一旦成为变量的别名就永远是那个变量的别名。
       指针是变量地址,指向变量,可以为空,用之前要检查非空,可以改变指向。


  • 相关阅读:
    Leetcode979 : Distribute Coins in Binary Tree 二叉树均匀分配硬币问题
    Leetcode547: Friend Circles 朋友圈问题
    线程安全的生产者消费者四种实现方法
    Leetcode823 : 因子二叉树问题
    Leetcode7 : Reverse Integer 整数反转问题
    Leetcode3 : 最长不含重复字符子串问题
    Leetcode6 : ZigZag 转换问题
    leetcode8 : 实现atoi函数将字符串转化为整数问题
    seo域名选择
    利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
  • 原文地址:https://www.cnblogs.com/qianwen/p/3830910.html
Copyright © 2011-2022 走看看