C this指针的理解和作用

本文通过将C++代码转换为C代码的方式,解释了C++中的this指针的作用。this指针用于指向成员函数操作的对象,在非静态成员函数中,它作为隐含参数存在。当成员函数被调用时,this指针会自动传入,即使对象是空指针,只要不涉及成员变量,函数仍可执行。然而,静态成员函数无法使用this指针,因为它们不属于特定对象。了解this指针对于C++编程至关重要。
摘要由CSDN通过智能技术生成

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 指针。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值