22.引用指针

Posted 喵小喵~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22.引用指针相关的知识,希望对你有一定的参考价值。

  • 引用的本质就是两个变量名的地址是同一块内存,可以改变该地址指向的内容
  • 引用指针可以改变指针指向的地址(因为取地址就是指针变量的地址,地址改变,原指针指向的地址也变了),也可以改变指针指向的内容

 

 

  • 左值引用与右值引用
     1 //左值引用与右值引用
     2 void main1()
     3 {
     4     int a(4);
     5     int *p(new int(5));
     6     cout << a << endl;
     7     cout << *p << endl;
     8     //右值引用
     9     int &&rra(move(a));//右值引用,有内存实体就直接引用,没有就开辟内存
    10     rra = 1;
    11     cout << a << endl;
    12 
    13     //左值引用
    14     int &la(a);
    15     int *&lp(p);
    16     la = 3;
    17     *lp = 12;
    18     cout << a << endl;
    19     cout << *p << endl;
    20 
    21 
    22     cin.get();
    23 }

     

  • 一级指针引用改变指针的指向
     1 //引用一级指针
     2 int num1 = 10;
     3 int num2 = 20;
     4 //C++能用引用就别用指针
     5 //引用可以改变指针的地址也可以改变指针指向的地址或值
     6 void change(int *&rp)
     7 {
     8     rp = &num2;
     9 }
    10 
    11 
    12 void main2()
    13 {
    14     int *p = &num1;
    15     change(p);
    16 }

     

  • 引用二级指针
     1 //引用二级指针
     2 int data1 = 10;
     3 int data2 = 20;
     4 int *p = &data1;
     5 int *p2 = &data2;
     6 
     7 //引用传递的是变量的地址
     8 void changeit(int **&rpp)
     9 {
    10     //改变二级指针存储的地址
    11     //*rpp = &data2;
    12     //改变二级指针指向的地址
    13     rpp = &p2;
    14 }

     

  • 返回值是引用指针
     1 //返回的指针类型为char *类型的引用
     2 char * & get()
     3 {
     4     char *p = "hello";
     5     printf("&p=%p,,p=%p\n", &p, p);
     6     return p;
     7 }
     8 
     9 void main()
    10 {
    11     char *&rp = get();//rp变量的地址就是p的地址,rp是存储的地址
    12                       //当rp变量的地址被回收,rp存储的地址就不能被读取
    13     printf("%p\n", &rp);
    14     char *newp = get();//newp的地址是新创建的,并指向p,不会被回收
    15     printf("%p\n", &newp);
    16     cin.get();
    17 }

     

以上是关于22.引用指针的主要内容,如果未能解决你的问题,请参考以下文章

为啥从 constexpr 引用生成的汇编代码与 constexpr 指针不同?

指针/引用数组?

第22课 weak_ptr弱引用智能指针

getApplicationContext给出空指针异常[重复]

使用 strcmp 取消引用指向不完整类型错误的指针 [关闭]

尝试在空对象引用上调用接口方法“____”[重复]