C++ | 引用和指针

引用(reference)

引用(reference)是给对象起的另一个名字,引用本身不是对象,而是对象的别名。

引用类型定义语法如下:

int A = 9;
int &refA = A;		// refA是A的引用,及refA是A的别名
int &refA2;			// 报错:引用必须被初始化

一般初始化变量时,是把初始值拷贝到新建的对象中。然而定义引用是,程序会把引用和初始值绑定在一起,而不是把初始值拷贝给引用。初始化完成时,引用就与其初始值对象一直绑定在一起,因此引用定义时必须被初始化且引用定义后无法再绑定其他对象。

指针(pointer)

指针是指向另一种类型的符合类型。指针与引用都实现了对其他对象的间接访问。

指针与引用的不同点。第一,指针本身是对象,可以对指针进行赋值和拷贝操作;第二指针无需在声明时初始化。

指针类型定义语法:

int A = 9;
int *pA = &A;	// 定义指针pA并将其指向A的地址
int *pB;		// 定义指针pB

Tips:

指针变量的大小取决于编译器,在64位编译器中对指针变量进行sizeof()操作值为8,在32位编译器中则为4。

利用指针访问对象需要对指针进行解引用操作,解引用符(操作符*)

int A = 9;
int *pA = &A;	// 定义指针pA并将其指向A的地址
*pA = 99;		// A的值变为99

指向指针的指针

int A = 9;
int *pA = &A;	// pA指向一个int类型的数
int *ppA = &pA;	// ppA指向一个int类型的指针

三者关系如下:

就像接引一个指向int类型的指针会得到一个int类型的数一样,解引用一个指向指针的指针会得到一个指针。也就是说*ppA会得到pA,若要得到A就需要对指针的指针进行两次解引用,及**ppA。

指向指针的引用

顾名思义,指向指针的引用就是指针变量的别名,使用语法如下:

int A = 9;
int *pA = &A;
int *&ref = pA;		// ref就是对指针pA的引用

const的引用

const定义常量对象,所以const的引用是对常量对象的引用。使用语法如下:

const int A = 9;
int C;
const int &refA = A;	// 定义常量引用
refA = 99;				// 报错:refA是常量对象的别名,而常量对象不可修改
int &refB = A;			// 报错:试图让一个非常量引用指向一个常量对象
const int &refC = C;	// 允许将const int&绑定到一个普通的int对象上

指针和const

指向常量的指针,使用语法如下:

const int A = 9;
int *pA = &A;			// 错误:pA是一个普通指针
const int *pB = &A;		// 正确
*pB = 99;				// 错误:pB指向一个常量,所以不能给*pB赋值

const指针

指针是一个对象,因此也能将指针声明为常量指针,与其他常量对象一样,常量指针必须在声明时初始化,语法如下:

int A = 9;
int *const pA = &A;			// pA将一直指向A
const int *const pB = &A;	// pB是一个指向常量对象的常量指针

划重点

pA与pB都是常量指针,但指向的对象不同。如何通过声明语法来区分呢。

从右向左阅读的方法,int *const pA 中pA的左边是const,则表示pA是一个常量对象,声明符中的下一个符号是*,则表示pA是一个常量指针。最后,声明语句的基本数据类型部分确定了常量指针指向的是一个int对象。与pA相似的pB也是一个常量指定,但其指向一个int类型常量。

常量指针和指针常量。常量指针如上,表示指针是一个常量对象,即指针必须在声明时初始化,且一直指向初始化的变量。

在了解指针常量前我们先来学习其声明语法:

  int A = 9;
  const int *pA = &A;	// 声明指针常量
  *pA = 10;				// 报错

从右向左阅读的方法来理解const int *pA,pA的左边是操作符*,这表示pA是一个指针对象,声明语句的基本数据类型部分确定了pA指向一个int类型的常量对象。

常量指针与指针常量小结:

常量指针(int *const pA = &A;):指针对象不可修改,但指针指向的对象可以修改;

指针常量(const int *pA = &A;):指针对象可以修改,但指针指向的对象不可修改。

#c++学习##c++指针##c++引用#
全部评论

相关推荐

点赞 评论 收藏
分享
搜索部 首先说下timeline8.18,投递8.19,约一面8.21,晚上一面call约二面8.22,上午二面下午oc周末等待(8.23,8.24)8.25,offer一年前,我还是懵懵懂懂,高考完的暑假,只会提前学学高数,未来的画像是什么?我或许无法预测。开学后,自学Python,接单,无数个客户的ddl,偷偷摸摸一个人找自习的地方,这一步步竟然为后来的我,搭建工程能力的基础。大一上,我也要感谢我的第一位老板,让我接触到了实习,师兄带着我一步步入门,看他们写的飞书文档。大一下,导师带我参与企业项目,这让我渐渐发现,应该去实践,增长见识,而非局限当下,盯着自己的小新pro。不久后,第一波投递开始,结果当然是约面极少。盯着简历上的文字和ssob,我开始思考,确实很多可以去提升。带着些许不甘心,继续沉淀,慢慢的约面也越来越多,有的时候两天7场,准备完就接着下一个日程。这一次,也许是刚好到位吧,比较match,面试答的流利,关关难关关过,成为度孝子展望未来,依然是重重挑战,果然只有收到offer的那一刻是开心的。愿在百度星海拆解的每一段代码,都能成为丈量宇宙的诗行;此志终赴星河,而今迈步重铸天阶。屏幕前的你们,在无数个向星海奔赴的日夜,一定一定,会在未来化作群星回响的征程——请永远相信此刻埋首耕耘的自己!!!
一天三顿半:???百度提前批发 offer了?不是统一和正式批排序完再发吗我靠
百度求职进展汇总
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
09-17 15:52
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务