c++ 引用 指针。
2024-10-21 15:38:58
一、什么是引用(reference) ?已经存在的对象的另外一个名字。
引用有什么特别的?
1.引用在定义时,以&开头。
2.引用不是对象,只能绑定在对象上。所以必须在初始化的时候,指定引用绑定的对象。而且引用绑定是不可以改变的。
int val = 0; int &refVal = val;
不允许这样初始化 int &refVal;
3.就像使用变量名一样,对引用赋值,实际上是给该引用绑定的对象赋值,获取引用的值,也同样是获取与该引用绑定的对象的值。
int &refVal2 = refVal ;// refVal2绑定到了val上面。 int copyVal = refVal; // 初始化copeVal为val的值。
二、什么是指针(pointer)? 存放着某个对象所在地址的对象。
和引用的区别是,指针是对象,可以被更改。不必须初始化,尽管一般会初始化以规避一些问题的出现。
1.指针在定义时,以*开头。赋值时需要使用取地址符(&)来得到某个对象的地址。在C++中,相同的符号,在不同的情况使用,意义不同,就像不同的符号。
int val = 0; int *p = &val; //p存放val的地址, 即 p是指向val的指针。指针类型一般必须和指向的对象类型完全一致。
2.如何通过指针来得到指针指向的对象的值,以及改变该对象的值?如何获取指针中的地址?
可以用解引用符(*)获取指针指向的对象的值,给解引用的指针赋值,就是给被指针指向的变量赋值。
直接获取指针的值,就是获取指针存放的地址。
储存常量地址的指针,必须使用指向常量的指针(pointer to const)
const int num =0;
const int *p = # //底层const
但是常量指针可以指向非常量的对象。(不变的是指针所存放的地址,而不是指针指向的对象)
double pi = 3.14159;
double *const pd = π//顶层const,不可以修改指针的值
pi = 1.26;//ok。
*pd = 3.14;//ok, 指向非常量对象的指针可以用来修改对象的值
顶层const和底层const的区别究竟在哪里?
int num = 3;
const int *p_i = # //底层const,不代表它指向的值一定是const.
num = 2;//ok,*p_i ==2 now
//*p_i = 1;//wrong ,不可通过底层const指针修改指向的对象的值。
int num2= 3;
p_i = &num2;//底层const指针可以重新赋值其他地址。
int *const p_t = &num2;
//p_t = #//wrong,read-only 不可以修改顶层指针的地址。
*p_t = 1;//ok,可以通过顶层指针修改对象的值。
const int *const p_m = &num2;
//*p_m = 1;//wrong ,底层+顶层const指针。
int *p_w;
p_w = p_t;//ok,顶层指针可以被赋值给普通int指针。
//p_w = p_i;//wrong ,底层指针不可以被赋值给没有底层const资格的指针
最新文章
- (转)C# 选择正确的集合
- JavaScript (If...Else和Switch和循环遍历) 语句以及常用消息框
- 获取ip ,百度地图坐标点 和 在 后台调用 url()
- Java序列化格式详解
- C++ 动态数组实例
- 如何将消息发送给Whatsapp联系人
- Sql 字符串替换
- 用视频编辑软件打不开jpg格式的图片的解决方法
- poj 3692 二分图最大匹配
- VIM 选择多行,复制粘贴
- Beyond REST: How to build a HATEOAS API in Java with Spring MVC, Jersey (JAX-RS) and VRaptor
- Arrays.sort源代码解析
- 调用数据库过程函数mysql
- HDU 4349 Xiao Ming&;#39;s Hope
- ansible尝试
- ==、equals、hashCode区别?
- 引导图滤波(Guided Image Filtering)原理以及OpenCV实现
- 理解es6中的const与“不变”
- [ZZ]39条更好的软件开发方法
- pandas numpy处理缺失值,none与nan比较