美文网首页
C/C++ 指针和引用的区别

C/C++ 指针和引用的区别

作者: jcyan | 来源:发表于2018-07-19 17:13 被阅读0次
    • 指针和引用的区别
      性质方面
      1.指针是一个实体,需要分配内存空间;引用只是变量的别名,不需要分配空间。
     void main(){
        int a = 1; 
        int *p = &a;
        int &b = a;
        cout << p << endl;
        cout << *p << endl;
        cout << &b << endl;
        cout << b << endl;
    }
    //结果是:地址/1/地址/1
    
    

    2.引用在定义的时候必须要初始化,并且不能改变。指针在定义的时候不一定要初始化,并且指向空间可变。(引用的值不能为NULL)
    3.有多级指针,但是没有多级引用。只能有一级引用。
    4.指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用是引用的变量值加1)

    void main(){
        int a[2] = {123,256};
        int *p = a;
        int &b = a[0];
        b++;
        cout << a[0]<< endl;
        cout << a[1]<< endl;
        cout << *p << endl;
        cout << b << endl;
        //124,256,124,124
        p++;
        cout << a[0] << endl;
        cout << a[1] << endl;
        cout << *p << endl;
        cout << b << endl;
        //124,256,256,124
    }
    
    1. “sizeof引用”得到的是所指向的变量(对象)的大小,而“sizeof指针”得到的是指针本身的大小
    int a; //sizeof(a),就是求变量a所占内存,值为4;
    int &b=a; // sizeof(b)==sizeof(a)
    int *p = &a;// sizeof(p),指针p所占的内存,指针变量在32/64位系统下都是4个字节
                //sizeof(*p) 指针p指向变量所占的内存,也就是sizeof(a)
    

    6.如果返回动态内存分配的对象或内存,必须使用指针,引用可能引起内存泄露。


    指针和引用作为函数参数进行传递时的区别

    1. 函数参数中的引用传递可以改变参数的值,值传递不会改变值
    void main(){
    double x= 3.0;
    cout<<cube(x);
    cout<<"= cube of " << x<<endl;
    cout<<refcube(x);
    cout<<"= cube of "<< x << endl;
    }
    double cube(double a){
           a*=a*a;
           return a;
    }
    double recube(double &ra){
          ra*=ra*ra;
          return ra;
    }
    // 27 = cube of 3
    // 27 = cube of 27
    refcube()函数修改了main中的x值
    

    相关文章

      网友评论

          本文标题:C/C++ 指针和引用的区别

          本文链接:https://www.haomeiwen.com/subject/roxspftx.html