C++学习笔记31,指向引用的指针(3)

我们来看一个简单的指向引用的指针的例子。

#include <iostream>
using namespace std;
int main(){
    int x=10;
    int y=20;
    int &rtx=x;
    //不要写成了int& *ptrx=&rtx;
    //因为rtx的本质是一个int
    int *ptrx=&rtx;
    *ptrx=15;
    ptrx=&y;
    rtx=y;
    cin.get();

}

依次单步执行:(注意rtx值的变化和ptrx的变化)

初始化引用rtx之后,rtx指向了x,其地址和&x一致。

执行int *ptrx=&rtx;之后,初始化了ptrx,也是指向x;

*ptrx=15;这一句执行后的结果

可以看到,改变的依旧是其值,其指向依旧没有改变,同时x的值也会随之改变。

执行ptrx=&y之后

可以看到ptrx的指向改变了,这是肯定的,但是rtx的指向并没有改变。

执行 rtx=y之后,是否指向会改变呢?答案是肯定的,不会!

改变的依旧是rtx所指向的值!这就是指向引用的指针。

C++学习笔记31,指向引用的指针(3),布布扣,bubuko.com

时间: 2024-12-28 10:51:42

C++学习笔记31,指向引用的指针(3)的相关文章

C++学习笔记:指向函数的指针

1 #include <stdio.h> 2 3 int sum(int a, int b) 4 { 5 return a+b; 6 } 7 8 int minus(int a, int b) 9 { 10 return a-b; 11 } 12 13 int x(int a, int b) 14 { 15 return a*b; 16 } //第一个参数为指向函数的指针,返回类型为int,参数是int,int 1 void counting(int (*p)(int, int), int a

C++学习笔记29,引用变量(1)

引用变量在创建的时候就必须初始化.无法创建一个未被初始化的引用. #include <iostream> using namespace std; int main() { int x=10; int y=20; int &r1; } 编译结果: 如果引用未被初始化,编译将报错. 修改引用: 引用总是指向初始化的那个变量,也就是说,引用一旦被创建并初始化之后就无法改变.这一规则有点让人迷惑.. 如果声明了一个引用的同时使用一个变量赋值了,那么这个引用就会一直指向这个变量. 在此后使用变

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

C语言基础学习6: 指向函数的指针

1.函数指针变量调用函数 1 #include <stdio.h> 2 int max(int x, int y); 3 int max(int x, int y) 4 { 5 int z; 6 if(x<y) 7 z = y; 8 else 9 z = x; 10 return z; 11 } 12 void main() 13 { 14 int a,b,c; 15 scanf("a=%d,b=%d",&a,&b); 16 c = max(a,b);

Binder学习笔记(十一)—— 智能指针

轻量级指针 Binder的学习历程爬到驱动的半山腰明显感觉越来越陡峭,停下业务层的学习,补补基础层知识吧,这首当其冲的就是智能指针了,智能指针的影子在Android源码中随处可见.打开frameworkds/rs/cpp/util,RefBase.h和StrongPointer.h两个文件,代码多读几遍都能读懂,可是串起来总感觉摸不到骨架,把不住主线.闭上眼零零星星的点串不成一条线.究其原因应该是此处使用了模式,最好先剔除掉业务层的皮肉,把模式的骨架摸个门清,再回来看代码就会势如破竹了. 不是多

C++学习笔记(五):指针

声明指针: 1 //指针声明 * 号左右的空格是可选的,下面的定义都是正确的 2 int *pointer1; 3 int* pointer2; 4 int*pointer3; 5 int * pointer4; 6 //注意: pointer5 是指针而 pointer6 不是 7 int *pointer5, pointer6; 8 //pointer7 和 pointer8 都是指针 9 int *pointer7, *pointer8; 指针的类型和指针所指向的类型: 1 //指针的类型

Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用

Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过GenericService调用所有服务实现. <dubbo:reference id="barService" interface="com.foo.BarService"

【学习笔记】【oc】指针

1.取一个变量的值,可通过直接与间接的方式 直接:访问变量 间接:通过变量的内存地址来获取变量的值. 存放内存地址的变量就是指针变量. 2.定义指针变量的语法:类型* 变量名 &:取地址运算符,取变量的内存地址:(单目运算符) *:取变量运算符,读取指针所指的变量. 3.对于指针变量,有两个规则: (1)定义指针变量时,必须用*来标识定义指针变量: (2)c语言是强类型语言,指针变量需要先定义再使用,而且一旦指定指针的类型,则该指针变量只能指向指定类型的变量. 4.指针可作为函数形参: #imp

OpenCV学习笔记09--通过cvPtr2D或指针算法绘制图形

练习:创建一个1000*1000的三通道图像,将其元素全部置0,以(200,50)和(400,200)为顶点绘制一个绿色平面 我们可以用两种方法来实现这一功能,一个是使用cvPtr2D,但是由于使用了函数,会使程序的效率变低.合适的方法是使用指针直接改变色素的值. 方法一:使用cvPtr2D CvPtr2D能够根据参数中的行和列读取该位置的元素,但是该元素包含三个指针,分别控制蓝绿红.CvPtr2D指向的是元素的第一个指针,而该元素其他的颜色指针则为cvPtr2D(img,top,left)+1