this指针的创建
创建于成员函数开始执行前,执行完后清除,而且它只能在静态成员函数中有用,其它函数调用不了this指针。
this指针的具体指向对象
指向对象的首地址
来看代码
#include <iostream>
#include <string.h>
using namespace std;
class student
{
public:
void Initstudent(char * name, char* gender, int age)
{
strcpy(_name, name);
strcpy(_gender, gender);
_age = age;
}
void Printstudent()
{
cout << _name << "\n" << _gender << "\n" << _age << endl;
}
private:
char _name[20];
char _gender[4];
int _age;
};
int main()
{
student s1;
s1.Initstudent("小尚", "boy", 20);
/*void Initstudent(student *const this,char *name ,char *gender,int age);其实这才是真正的传参方式,也就是this指针的真正存在方式*/
s1.Printstudent();
}
分析
在main()函数中给了一个学生s1,用初始化函数给出名字性别年龄,当然这是我室友的名字,随手拿来用了,那么接下来就是程序执行打印函数,而且很理想在屏幕上输出了室友的信息,现在需要考虑的就是为什么s1的这些信息可以就这样输出来,这里便有了this指针,它会指向s1的地址,就像它知道我室友家在哪,然后让初始化函数去我室友家并给我室友起了名字给了年龄什么的,这里好像有点不太恰当,对 在程序没输出结果前我们不知道this指向的那个地址住着的到底是谁,是指针带着函数找到那个地址并给了住在那个地址里的人如上面的一些信息
this指针的传参方式及特性
1:参数压栈:当成员函数的参数为可变时(遵循_cdecl调用约定)
2:ecx寄存器:当成员函数的参数固定时(遵循_thiscall调用约定)
this指针的特性:
1:类型:类类型*const
2:this指针并不是类本身的一部分,不影响sizeof(类)的大小 .
3:this指针是非静态成员函数的一个隐含指针形参,是编译器自己给的,不能由程序员手动添加.
4:this 指针可以为NULL .
5:this 指针和引用的底层实现一样但是类的概念在引用之前提出来所以没有用引用代替this指针.