• 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
      ", &p, p);
       6     return p;
       7 }
       8 
       9 void main()
      10 {
      11     char *&rp = get();//rp变量的地址就是p的地址,rp是存储的地址
      12                       //当rp变量的地址被回收,rp存储的地址就不能被读取
      13     printf("%p
      ", &rp);
      14     char *newp = get();//newp的地址是新创建的,并指向p,不会被回收
      15     printf("%p
      ", &newp);
      16     cin.get();
      17 }
  • 相关阅读:
    asp.net
    深度优先遍历
    计算机存储体系
    CPU 进程 线程 关系与区别
    OLAP、OLTP的介绍和比较
    几种消息队列对比
    协议那些事(四)
    协议那些事(三)
    协议那些事(二)
    协议那些事(一)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8544870.html
Copyright © 2020-2023  润新知