C this指针的理解和作用
C 程序到 C 程序的翻译
要想理解 C 的 this 指针,我们可以先把下面的 C 代码转换成 C 代码:
C 语言是没有类定义 class 关键词,但是有跟 class 类似的定义,那就是 struct 结构体。
m_price 变量是 Car 类的成员变量,那么我们可以把 Car 类和成员变量翻译成如下的 C 代码:
SetPrice 函数是 Car 类的成员函数,但是 C 程序里是没有成员函数这种概念的,所以只能把成员函数翻译成全局的函数:
为什么要加个 this 的指针呢?我们继续往下看。
在这里我们把上面 C 程序的 main 函数翻译 C 程序,是这样的:
所以最终把上述的 C 程序 转换成 C 程序的代码如下:
所以加 SetPrice 函数的第一个参数 this 指针的作用,就是为了给结构体 Car 域里的变量赋值。
this 指针的作用
其作用就是指向成员函数所作用的对象,所以非静态成员函数中可以直接使用 this 来代表指向该函数作用的对象的指针。
下面的例子可以很好的说明 this 的作用:
输出结果:
20000
20000
接下来我们看下面的代码,你觉得输出结果是什么呢?会出错吗?
答案是正常输出 hello,你可能会好奇明明 p 指针是空的,不应该是会程序奔溃吗?别着急,我们先把上面的代码转换 C 程序,就能理解为什么能正常运行了。
所以,实际上每个成员函数的第一个参数默认都有个指向对象的 this 指针,上述情况下如果 this 指针指向的对象是空,相当于成员函数的第一个参数是 NULL,那么只要成员函数没有使用到成员变量,是可以正常执行。
那么下面这份代码执行时,就会奔溃了,因为 this 指针是空的,使用了空的指针指向了成员变量 i,程序就会奔溃。
this 指针和静态成员函数
静态成员函数是不能使用 this 指针,因为静态成员函数相当于是共享的变量,不属于某个对象的变量。
小结
通过将 C 程序翻译成 C 程序的方式,来理解 this 指针,其作用就是指向非静态成员函数所作用的对象,每个成员函数的第一个参数实际上都是有个默认 this 指针参数;
静态成员函数是无法使用 this 指针。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
C this指针的理解和作用相关推荐
- springboot 对象 空指针_C++ this指针的理解和作用
C++ 程序到 C 程序的翻译 要想理解 C++ 的 this 指针,我们可以先把下面的 C++ 代码转换成 C 代码:C 语言是没有类定义 class 关键词,但是有跟 class 类似的定义,那 ...
- C++ this指针的理解和作用
微信公众号:「小林coding」 用简洁的方式,分享编程小知识. 01 C++ 程序到 C 程序的翻译 要想理解 C++ 的 this 指针,我们先把下面的 C++ 代码转换成 C 的代码 class ...
- 64位程序怎么判断指针是否有效_C 语言指针怎么理解?
注: 看完这篇一定会让你理解透彻指针的本质 是的,这一篇的文章主题是「指针与内存模型」 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不了解的对指针的理 ...
- C++const 对指针和引用的作用
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105065547 指 ...
- 指向数组的指针的理解
指向数组的指针的理解 开发工具与关键技术:Visual Studio.C++ 作者:张国军 撰写时间:2019年05月03日 数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值. ...
- JavaScript this指针的理解
一.this 指针的理解 借鉴参考http://www.cnblogs.com/kongxy/p/4581223.html this 是 js 的关键字,代表函数运行时,自动生成的一个内部对象.只能在 ...
- 关于空指针(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说空指针,或者说void指针,对于我这样的生手来说,理解非常容易造成混淆,因为void这个单词的意思也是空,到底空指针的意思是指指向地址为空的类型呢,还是指void类型的指针呢 (1) ...
- c++中this指针的理解(转载:苦涩的茶 ——产品开发 C++类中this指针的理解)
先要理解class的意思.class应该理解为一种类型,象int,char一样,是用户自定义的类型.用这个类型可以来声明一个变量,比如int x, myclass my等等.这样就像变量x具有int类 ...
- iOS经典面试题之深入解析objc对象的内存空间、数据结构以及isa指针的理解
一.objc 对象的 isa 的指针指向什么?有什么作用? isa 等价于 is kind of: 实例对象 isa 指向类对象: 类对象指 isa 向元类对象: 元类对象的 isa 指向元类的基类: ...
最新文章
- Python实现获得SQLServer数据库中的表插入到Oracle数据库
- arduino如何调用mysql,【 实测可用 】Arduino 直接访问 mysql
- swscanf_s和sscanf_s的使用
- 08-面向对象----
- 「第六篇」对于电赛,我们应该看重什么?
- ssl提高组周六备考赛【2018.10.20】
- 工业以太网交换机可以家用吗?
- 嵌入式C/C++开发过程中日志输出的一点思考
- GARFIELD@01-01-2005
- 流程控制库async
- 当一盆植物在MIT成了精,不,它只是成了机器人
- HMM:隐马尔科夫模型 - 预测和解码
- 《Linux 命令行大全》
- 编译实验 . 递归下降分析器
- java dbutils_Java学习之DBUtils
- 洪恩软件进军网游产业 池宇峰揭密完美世界
- 剑指offe JZ18 删除链表的节点
- 张瑞申教授SSRN论文数据公开 | 公司层面气候变化暴露指数
- DAE模型——阅读和理解COLLADA文档(2)
- 苹果CEO库克: 请无所畏惧,做最不愿接受现状的人丨2018年毕业典礼演讲
热门文章
- java 基础包的功能_Java 8的功能基础
- oauth2和jwt_使用具有OAuth2的Web应用程序和JWT的使用来调用API – WSO2 API Manager
- Spring MVC:高级会话
- Spring Webflux –编写过滤器
- junit 参数化测试用例_JUnit:在参数化测试中命名单个测试用例
- java自动推断类型_Java 7的类型推断
- Lucene分析过程指南
- 通过示例Hibernate–第2部分(DetachedCriteria)
- hadoop简单介绍_Hadoop:简单介绍
- 了解Spring Web应用程序体系结构:经典方法