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

    文章

    4303

    浏览量

    62409
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73478
  • C程序
    +关注

    关注

    4

    文章

    254

    浏览量

    35991

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

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

收藏 人收藏

    评论

    相关推荐

    C语言和C++结构体的区别

    同样是结构体,看看在C语言和C++中有什么区别?
    的头像 发表于 10-30 15:11 132次阅读

    C语言指针运算符详解

    C语言中,当你有一个指向数组某个元素的指针时,你可以对该指针执行某些算术运算,例如加法或减法。这些运算可以用来遍历数组的元素,如ptr
    的头像 发表于 10-30 11:16 153次阅读

    面试常考+1:函数指针指针函数、数组指针指针数组

    在嵌入式开发领域,函数指针指针函数、数组指针指针数组是一些非常重要但又容易混淆的概念。理解它们的特性和应用场景,对于提升嵌入式程序的效率
    的头像 发表于 08-10 08:11 675次阅读
    面试常考+1:函数<b class='flag-5'>指针</b>与<b class='flag-5'>指针</b>函数、数组<b class='flag-5'>指针</b>与<b class='flag-5'>指针</b>数组

    C++实现类似instanceof的方法

    函数,可实际上C++没有。但是别着急,其实C++中有两种简单的方法可以实现类似Java的instanceof的功能。 在 C++
    的头像 发表于 07-18 10:16 528次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>实现类似instanceof的方法

    面试的高频问题:指针函数与函数指针,你能完美应对吗?

    一直觉得C语言较其他语言最伟大的地方就是C语言中的指针,有些人认为指针很简单,而有些人认为指针很难,当然这里的对简单和难并不是等价于对
    的头像 发表于 06-22 08:11 1546次阅读
    面试<b class='flag-5'>中</b>的高频问题:<b class='flag-5'>指针</b>函数与函数<b class='flag-5'>指针</b>,你能完美应对吗?

    Keil+C51对双数据指针的直接利用

    Keil+C51对双数据指针的直接利用
    发表于 06-18 10:15 0次下载

    使用 MISRA C++:2023® 避免基于范围的 for 循环中的错误

    在前两篇博客,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客,我们将仔细研究以 C++
    的头像 发表于 03-28 13:53 732次阅读
    使用 MISRA <b class='flag-5'>C++</b>:2023® 避免基于范围的 for 循环中的错误

    C语言的指针用法

    C语言编程善用指针可以简化一些任务的处理,而对于一些任务(比如动态内存分配),必须要有指针才行的。也就是说精通C
    发表于 03-05 14:22 313次阅读
    <b class='flag-5'>C</b>语言的<b class='flag-5'>指针</b>用法

    怎么理解指针指针

    怎么理解指针指针?其实这个概念并不难,只是把它放到实际应用,容易造成困扰。
    的头像 发表于 02-23 16:46 1074次阅读
    怎么<b class='flag-5'>理解</b><b class='flag-5'>指针</b>的<b class='flag-5'>指针</b>?

    c语言,c++,java,python区别

    操作系统、嵌入式系统等对性能要求较高的场景。C语言的语法相对简单,学习曲线较平缓,也是学习其他高级语言的入门语言。 C++C++是在C语言的基础上进行扩展和改进的一种编程语言。它支
    的头像 发表于 02-05 14:11 2214次阅读

    C++简史:C++是如何开始的

    的 MISRA C++:2023 博客系列的第二部分。 在这篇博客,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
    的头像 发表于 01-11 09:00 527次阅读
    <b class='flag-5'>C++</b>简史:<b class='flag-5'>C++</b>是如何开始的

    C语言和C++那些不同的地方

    ++11标准。根据不同的标准,它们的功能也会有所不同,但是越新的版本支持的编译器越少,所以本文在讨论的时候使用的C语言标准是C89,C++标准是C++99.我们来介绍
    的头像 发表于 12-07 14:29 902次阅读
    <b class='flag-5'>C</b>语言和<b class='flag-5'>C++</b><b class='flag-5'>中</b>那些不同的地方

    数组与指针不能混用的情况

    指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存的某个位置。在 C/C++
    的头像 发表于 12-07 13:46 568次阅读

    指针是什么

    指针是什么? 1.1 浅谈指针 理解指针的 两个要点: 指针是内存中一个最小单元的编号,也就是地址; 平时口语
    的头像 发表于 11-24 15:50 1981次阅读
    <b class='flag-5'>指针</b>是什么

    c++多行注释快捷键

    C++,多行注释(也称为块注释)是一种用于注释大段代码或多个语句的方法。当你希望暂时禁用一些代码或者解释特定部分代码的作用时,多行注释是非常有用的。 在C++
    的头像 发表于 11-22 10:24 8136次阅读