c++ 引用 指针。
一、什么是引用(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资格的指针
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)