0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析C++中this指针的理解以及作用

Q4MP_gh_c472c21 来源:小林coding 作者:小林coding 2021-06-27 11:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

01

C++程序到C程序的翻译

想要理解C++语言中的this指针,下面我们做一个举例,我们要先把下面的C++代码转换成C代码:

f2e45c3c-d6b2-11eb-9e57-12bb97331649.png

(1)大家知道,C语言中没有类定义class关键词,但是有跟class类似的定义关键词,就是struct结构体定义。m_height变量是Tree类的成员变量,那么我们就可以把Tree类和成员变量翻译成下面的C代码:

f3178a58-d6b2-11eb-9e57-12bb97331649.png

(2)SetHeight函数是Tree类的成员函数,但是C程序里面没有成员函数这个概念的,所以只能把成员函数翻译成全局的函数:

f3214476-d6b2-11eb-9e57-12bb97331649.png

那为什么还要再加个this指针呢?我们接着继续往下看。(3)接下来把C++中的main函数翻译成C程序,是下面这样的:

f3308c4c-d6b2-11eb-9e57-12bb97331649.png

所以最终把上面的C++程序转变为C程序的代码如下:

f3396024-d6b2-11eb-9e57-12bb97331649.png

加上SetHeignt函数的第一个参数this指针的作用,就是为了给结构体Tree域里的变量赋值。

02

this指针的作用

this指针的作用就是指向成员函数所作用的对象,所以非静态成员函数中可以直接使用this来代表指向该函数作用的对象的指针。

03

this指针和静态成员函数

静态成员函数不能使用this指针,因为静态成员函数相当于是共享的变量,不属于某个对象的变量。

04

小结

(1)通过将C++程序翻译成C程序的方式,来理解this指针,其作用就是指向非静态成员函数所作用的对象,每个成员函数的第一个参数实际上都有个默认this指针参数;(2)静态成员函数无法使用this指针。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    67884
  • C++
    C++
    +关注

    关注

    22

    文章

    2131

    浏览量

    77426
  • C程序
    +关注

    关注

    4

    文章

    255

    浏览量

    37694

原文标题:C++中this指针的理解和作用

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    关于FreeRTOS中断返回模式和堆栈指针理解

    在学习RTOS的过程,发现如下表格,即在中断或者异常处理函数,r14返回EXC_RETURN: 以下是个人的浅显理解: 中断处理函数时,MCU进入handler模式,只能使用MSP指针
    发表于 05-06 15:04

    使用VectorCAST/C++的AI辅助测试功能

    从2026版本开始,VectorCAST/C++推出首批AI辅助测试功能,旨在帮助开发团队解决单元测试过程的两个核心难点:
    的头像 发表于 04-27 14:37 328次阅读

    C++ 11 14 17 20内存管理-指针、智能指针和内存池基础与提升

    pan.baidu.com/s/1g64x9D_jp9ufk4uBpQBmvA?pwd=497f  未来 C++ 底层核心:内存管理实战,从指针到内存池全链路进阶 站在2026年的技术潮头,当AI
    的头像 发表于 04-20 15:51 557次阅读

    C++与lua联合编程

    对“尾部风险”(小概率但毁灭性的事件)的对冲。在 C++ 与 Lua 的交互,最可怕的尾部风险就是内存泄漏与栈溢出。 很多初学者在调用 Lua C API 时,由于不理解栈的绝对索引
    发表于 04-19 16:27

    keil实现cc++混合编程

    起因项目中使用到一个开源的模拟IIC的库,封装的比较好,但是是使用c++写的。于是将其移植到自己的项目中,主要有以下三步操作: 在工程选项 C/C++中去掉勾选
    发表于 01-26 08:58

    指针与函数详解

    可以运行的,上面的示例代码就是函数指针C语言中的最常见形态。之前的例子只是为了让你更能理解函数指针,实际开发只需要用函数
    发表于 01-23 06:02

    C语言重点—指针

    C语言是比较偏底层的语言,为什么他比较偏底层,就是因为他的很多操作都是直接针对内存操作的。 这篇我们就来讲解C语言的一大特点,也是难点,指针指针操作。 这篇文章我会先从基本类型的存储
    发表于 01-22 08:23

    C语言与C++的区别及联系

    缺点:性能比面向过程低。 二、具体语言上的区别 1、关键字的不同 C语言有32个关键字;C++有63个关键字。 2、后缀名不同 C源文件后缀.c
    发表于 12-24 07:23

    函数指针指针函数的区别

    用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数,函数返回值必须赋给同类型的指针变量。   表示:   float *fun();   float *p
    发表于 12-12 06:34

    CC++之间的联系

    1、语法兼容性: C++完全兼容C语言的语法,这意味着任何有效的C语言程序都可以直接在C++编译器下编译通过。 2、底层控制: C++
    发表于 12-11 06:51

    C语言和C++之间的区别是什么

    函数重载,即在同一作用域内可以定义多个同名函数,只要它们的参数列表不同即可。 C语言不支持函数重载,每个函数必须具有唯一的标识符。 4、异常处理: C++内置了异常处理机制,允许程序在遇到无法正常
    发表于 12-11 06:23

    C++程序异常的处理机制

    1、什么是异常处理? 有经验的朋友应该知道,在正常的CC++编程过程难免会碰到程序不按照原本设计运行的情况。 最常见的有除法分母为零,数组越界,内存分配失效、打开相应文件失败等等。 一个程序
    发表于 12-02 07:12

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

    对 Perforce Validate  QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 763次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码静态测试工具Perforce QAC 2025.3的新特性

    技能+1!如何在树莓派上使用C++控制GPIO?

    和PiGPIO等库,C++可用于编程控制树莓派的GPIO引脚。它提供了更好的性能和控制能力,非常适合对速度和精度要求较高的硬件项目。在树莓派社区,关于“Python
    的头像 发表于 08-06 15:33 4533次阅读
    技能+1!如何在树莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    主流的 MCU 开发语言为什么是 C 而不是 C++

    在单片机的地界儿里,C语言稳坐中军帐,C++想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++那些花里胡哨的玩意儿,在这儿真玩不转。先说内存这道坎儿。您当stm32f4的256kRAM
    的头像 发表于 05-21 10:33 1236次阅读
    主流的 MCU 开发语言为什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?