你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

C++ this指针的概念和作用

[复制链接]
gaosmile 发布时间:2020-9-25 21:55
C++ 程序到 C 程序的翻译


要想理解 C++ 的 this 指针,我们可以先把下面的 C++ 代码转换成 C 代码:
微信图片_20200925215310.jpg
C 语言是没有类定义 class 关键词,但是有跟 class 类似的定义,那就是 struct 结构体。

m_price 变量是 Car 类的成员变量,那么我们可以把 Car 类和成员变量翻译成如下的 C 代码:
微信图片_20200925215314.jpg
SetPrice 函数是 Car 类的成员函数,但是 C 程序里是没有成员函数这种概念的,所以只能把成员函数翻译成全局的函数:
微信图片_20200925215318.jpg
为什么要加个 this 的指针呢?我们继续往下看。在这里我们把上面 C++ 程序的 main 函数翻译 C 程序,是这样的:
微信图片_20200925215322.png
所以最终把上述的 C++ 程序 转换成 C 程序的代码如下:

微信图片_20200925215326.jpg
所以加 SetPrice 函数的第一个参数 this 指针的作用,就是为了给结构体 Car 域里的变量赋值。


this 指针的作用


其作用就是指向成员函数所作用的对象,所以非静态成员函数中可以直接使用 this 来代表指向该函数作用的对象的指针。
下面的例子可以很好的说明 this 的作用:

微信图片_20200925215330.jpg
输出结果:20000
20000

接下来我们看下面的代码,你觉得输出结果是什么呢?会出错吗?
微信图片_20200925215336.jpg
答案是正常输出 hello,你可能会好奇明明 p 指针是空的,不应该是会程序奔溃吗?别着急,我们先把上面的代码转换 C 程序,就能理解为什么能正常运行了。
微信图片_20200925215339.jpg
所以,实际上每个成员函数的第一个参数默认都有个指向对象的 this 指针,上述情况下如果 this 指针指向的对象是空,相当于成员函数的第一个参数是 NULL,那么只要成员函数没有使用到成员变量,是可以正常执行。
那么下面这份代码执行时,就会奔溃了,因为 this 指针是空的,使用了空的指针指向了成员变量 i,程序就会奔溃。
微信图片_20200925215345.jpg

1 收藏 1 评论0 发布时间:2020-9-25 21:55

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版