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 }

原文地址:https://www.cnblogs.com/xiaochi/p/8544870.html

时间: 2024-11-05 20:26:26

22.引用指针的相关文章

perl5 第十二章 Perl5中的引用/指针

第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句柄的引用 一.引用简介    引用就是指针,可以指向变量.数组.哈希表(也叫关联数组)甚至子程序.Pascal或C程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定.在Perl中,可以把引用称为指针,二者是通用的,无差别的.引用在创建复杂数据方面十分有用

引用&amp;&amp;指针&amp;&amp;返回值&amp;&amp;定义声明&amp;&amp;生命周期&amp;&amp;const

1. 首先了解一下声明和定义的区别: ? 声明,其实就是描述一个元素是有什么构成的; ? 定义,其实就是在内存中划分出一个区域且用符号关联起来; ? 变量和对象不加extern永远是定义,类中的除外. 函数只有函数头是声明,有函数体的是定义. 类永远只是声明.类成员函数的函数体是定义. ? 函数的声明和定义的不同点在于函数的声明不包含函数体,仅仅是fact(): 2. 其次了解一下局部对象的生命周期 ? 局部变量 i. 形参和函数体内定义的变量统称局部变量 ii. 局部变量转换成为全局变量,则使

C++ Primer 第二章 引用 指针 const限定符

1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息也可知,引用必须被初始化: 2.引用并非对象,相反的,它只是为一个已经存在的对象所起的另一个名字而已: 2.指针: 与引用类似,指针也实现了对其他对象的间接访问,不过,指针本身就是一个对象,允许对指针赋值与拷贝,而且在其生命周期内可以先后指向几个不同的对象(引用只能指向一个初始化的). 指针无须再定义时赋初

c/c++ 函数指针 指针函数 数组的引用 指针数组 数组指针

1.指针数组数组指针 引用数组 数组的引用 int *a[10] 指针数组 每一个元素都是一个指针 Int (*a)[10] 数组指针 P指向一个含有10个元素的数组 Int (&a)[10] 数组的引用 a是一个数组的引用 Int& a[10] 引用函数 非法 数组的引用:1.在程序体中 int a[10]; Int (&p)[10]=a;//引用数组 2.作为参数 #include <iostream> #include <string> using n

引用 指针 解引用

1.引用 (1)普通引用 符号:&   写在声明时对象的名字之前 概念: 对象的别名,指向同一个对象(地址空间与其保存的变量) 例子: int me = 100; int &alsoMe = me; 当我修改alsoMe的时候,me的值也被修改了,反之亦然,因为两者其实是同一个对象的不同名字. 用处:作为函数的形式参数 (2)const引用 概念: 指向const对象的引用 代码:const int forever = 21; const int &alsoForever =  f

C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效的机制,同时引入了另一个与指针相似但不相同的机制: 引用. 一.引用 简单的来说,引用就是变量的别名(alias), 通过别名我们可以操作引用代表的变量. 定义一个引用的语法如下所示: 变量类型   &引用标识符 = 变量名. Exp: int iVar=10; int &iRef = iVa

指针和引用

9月24日我在华南理工大学参加了保研面试,过程中老师问了我指针和引用的区别,现在详细说明一下: 一.引用 简单的来说,引用就是变量的别名(alias), 通过别名我们可以操作引用代表的变量. 定义一个引用的语法如下所示: 变量类型   &引用标识符 = 变量名. Exp: int iVar=10; int &iRef = iVar; iRef = 20 ; cout<<iVar<<endl; 这段程序执行的结果就是输出: 20 ; 程序通过引用 iRef 改变了变量

一次测试测试(C++11)智能指针引用的崩溃结论

项目中用到了智能指针,但是要在智能指针指向的类中获取此类的shared_ptr指针传给其引用的类,结果出现了问题, 测试代码如下: (包括错误解释) 1 //测试 shared_ptr weak_ptr map<string,shared_ptr> 2 #include <stdio.h> //pinrtf ... 3 #include <string> //string ... 4 #include <map> 5 #include <memory&

C++学习笔记(五)--指针、NULL、引用

1. C++中已经定义了NULL为0:#define NULL 0 指针p可以指向空值NULL即 p = NULL;表示该指针变量不指向任何变量. 注意:指针未初始化与指针为NULL不同, p = NULL;是有值的,为0: 而在定义时:int *p;这时候碎虽然未对p初始化,但不代表p无值,而是此时的值是一个无法预料的值,p可以指向任何一个 未指定的单元,这是非常危险的,所以在引用指针变量之前必须对其初始化. 任何指针变量都可以与NULL做 = 与 != 比较: 补充知识: 2.两个指针指向同