网站竞争对手如何做调研,2017主流网站风格,房地产行情最新消息,网站建设你的选择文章目录 指针和引用的区别和作用定义区别作用 指针和引用的区别和作用
定义
指针#xff1a;指针是一个变量#xff0c;其值为指向对象的内存地址#xff0c;而不是值本身。引用#xff1a;可以理解为对象的别名#xff0c;是另外一个变量的直接别名#xff0c;用于创… 文章目录 指针和引用的区别和作用定义区别作用 指针和引用的区别和作用
定义
指针指针是一个变量其值为指向对象的内存地址而不是值本身。引用可以理解为对象的别名是另外一个变量的直接别名用于创建一个已存在变量的另一个名字。
int a 10; // 变量 a 存储了值 10
int ref a; // ref 是变量 a 的引用int b 20; // 变量 b 存储了值 20
ref b; // 这实际上是将 b 的值赋给 a区别
是否初始化 指针可以不初始化但是最好初始化。 防止未定义行为未初始化的指针可能指向任意内存地址。如果不知道指向什么可以将其指向nullptr,。 引用必须初始化不能初始化为空对象初始化之后不能改变。 从引用是对象的别名角度理解如果初始化为空对象本身就没有意义。原因引用底层是通过指针实现的。当声明一个引用时编译器底层会创建一个指向原对象的指针并在之后的操作中使用这个指针来访为对象。但是这个指针是隐式的对程序员不可见一旦这个指针被初始化即引用被绑定到一个对象编译器没有提供机制来更改这个指针的值。 例如开始的代码中 int ref a;// 这里ref直接引用的a的地址注意ref本身没有内存地址。ref b; // 这里可以直接将a的值改为20也就是将a所代表的那块内存中存储的值改为20ref b; // 错误ref引用了a不可改变。对于a占据的内存ref是他的别名底层有编译器指针实现的而由于地址不可变性因此在编译完成到整个生命周期这个a的地址和ref都是不可改变的。符号表
是否能为空 指针可以为空引用不可以为空 是否直接操作对象 指针间接操作对象 指针存储了对象的地址对指针操作不会直接改变这个对象要通过指针变量对所指向的对象间接操作。例如*解地址引用。引用直接操作对象 是否是对象 指针是对象 指针有地址可以有指针的指针引用不是对象 引用没有地址。
作用 指针 传参避免对象数据的复制尤其是大型数据结构的时候。多态通过指针可以找到子类代码复用 引用 传参避免对象数据的复制函数返回值