this指针的作用,c里的this指针指向的是谁啊

1,c里的this指针指向的是谁啊C++中 , 只有类和结构体才有this指针 。该指针指向对象自身,它里面的所有内容都是当前函数所在类的对象,所有对象的值都是当前对象的值 。this的最大作用就把当前对象当作参数传给其他函数,比如:class a<
2,C this代表什么(*this)就是表示你当前类的对象你好!this指针一般用在类的申明,表明了对象的地址 。就是你定义了申明了一个类,然后用这个类去定义一个对象 。那么this指针就是指明了你定义的这个对象的地址 。如果对你有帮助,望采纳 。【this指针的作用,c里的this指针指向的是谁啊】
3,c this指针的目的是什么哎,这些东西如果一说就复杂了 。是这样的,其实不管C语言还是C++语言,最后编译成机器码并没有什么本质的区别,所谓类,虽然在语言这个层面有了一个概念性的解释(相同属性相同操作的集合的抽象化),但是实际上在二进制的表示和结构上没有什么本质的区别,都是一个内存区域保存了一些值 。那这样一来,就可能使得程序员跨过一个类的限制(比如应该只能访问自己的成员 , 但是你想办法访问了其他对象的成员) 。所以C++在设计的时候就隐含了一个this指针 , 这个指针主要是用于保证你的访问不能跨界和用于区分不同的对象 。举个例子,你的任何一个函数的申明实际隐含了一个this指针参数,这个参数你不可见,也不可编辑,是编译器自动添加上去的,为什么要这样?实际上对象在实例化的时候,体积是非常小的 , 并没有每一个对象都保存函数,同一个类的对象的函数实际上只有一份副本(二进制层面) , 那如何来区分到底是谁调用了函数?就是这个this指针 。this指针实际是指向了对象的内存地址起始值,所以通过一个偏移量,就知道了对象的各种属性(变量),也就确定了一个绝对的对象 。当然在对象的函数操作里我们可以显示的用this->的方式来引用变量,但是你也发现你即使不加上this指针 , 它依然知道你引用了谁,其实就是隐含了一个参数this指针 。为了进一步理解 , 想一下static修饰的函数有什么区别,为什么static函数只能访问static修饰的属性?因为static修饰的函数就没有传递这个this指针 , 所以它不知道你指的是哪一个对象 。而实际上,static修饰的符号就和C语言的全局变量和函数无区别了 。
4,this指针存在的目的是this指针存在的目的是(B、保证每个对象拥有自己的数据成员 , 但共享处理这些数据成员的代码)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 。this作用域是在类内部 , 当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。扩展资料:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果 。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数 。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参 , 对各成员的访问均通过this进行 。B,this与基类子类的问题没有关系 。只是一个指向自己的指针,访问自己的数据成员 。哎 , 这些东西如果一说就复杂了 。是这样的,其实不管c语言还是c++语言,最后编译成机器码并没有什么本质的区别,所谓类,虽然在语言这个层面有了一个概念性的解释(相同属性相同操作的集合的抽象化),但是实际上在二进制的表示和结构上没有什么本质的区别 , 都是一个内存区域保存了一些值 。那这样一来,就可能使得程序员跨过一个类的限制(比如应该只能访问自己的成员,但是你想办法访问了其他对象的成员) 。所以c++在设计的时候就隐含了一个this指针,这个指针主要是用于保证你的访问不能跨界和用于区分不同的对象 。举个例子,你的任何一个函数的申明实际隐含了一个this指针参数 , 这个参数你不可见,也不可编辑,是编译器自动添加上去的 , 为什么要这样?实际上对象在实例化的时候,体积是非常小的,并没有每一个对象都保存函数 , 同一个类的对象的函数实际上只有一份副本(二进制层面),那如何来区分到底是谁调用了函数?就是这个this指针 。this指针实际是指向了对象的内存地址起始值,所以通过一个偏移量 , 就知道了对象的各种属性(变量),也就确定了一个绝对的对象 。当然在对象的函数操作里我们可以显示的用this->的方式来引用变量,但是你也发现你即使不加上this指针,它依然知道你引用了谁,其实就是隐含了一个参数this指针 。为了进一步理解,想一下static修饰的函数有什么区别,为什么static函数只能访问static修饰的属性?因为static修饰的函数就没有传递这个this指针,所以它不知道你指的是哪一个对象 。而实际上,static修饰的符号就和c语言的全局变量和函数无区别了 。5 , cthis指针详解this指针只能在一个类的成员函数中调用,它表示当前对象的地址 。下面是一个例子:void Date::setMonth( int mn )month = mn; // 这三句是等价的this->month = mn;(*this).month = mn;} 1. this只能在成员函数中使用 。全局函数,静态函数都不能使用this 。实际上,成员函数默认第一个参数为T* const register this 。如: class A其中,func的原型在编译器看来应该是: int func(A* const register this, int p); 2. 由此可见 , this在成员函数的开始前构造的,在成员的结束后清除 。这个生命周期同任一个函数的参数是一样的,没有任何区别 。当调用一个类的成员函数时,编译器将类的指针作为函数的this参数传递进去 。如:A a;a.func(10);此处,编译器将会编译成: A::func(&a, 10);嗯,看起来和静态函数没差别,对吗?不过,区别还是有的 。编译器通常会对this指针做一些优化的,因此,this指针的传递效率比较高--如vc通常是通过ecx寄存器来传递this参数 。3. 回答#1:this指针是什么时候创建的?this在成员函数的开始执行前构造的,在成员的执行结束后清除 。#2:this指针存放在何处? 堆,栈,全局变量,还是其他?this指针会因编译器不同,而放置的位置不同 。可能是栈,也可能是寄存器,甚至全局变量 。#3:this指针如何传递给类中函数的?绑定?还是在函数参数的首参数就是this指针.那么this指针又是如何找到类实例后函数的?this是通过函数参数的首参数来传递的 。this指针是在调用之前生成的 。类实例后的函数,没有这个说法 。类在实例化时 , 只分配类中的变量空间,并没有为函数分配空间 。自从类的函数定义完成后,它就在那儿,不会跑的 。#4:this指针如何访问类中变量的/?如果不是类 , 而是结构的话,那么,如何通过结构指针来访问结构中的变量呢?如果你明白这一点的话,那就很好理解这个问题了 。在C++中,类和结构是只有一个区别的:类的成员默认是private , 而结构是public 。this是类的指针,如果换成结构,那this就是结构的指针了 。#5:我们只有获得一个对象后,才能通过对象使用this指针,如果我们知道一个对象this指针的位置可以直接使用吗?this指针只有在成员函数中才有定义 。因此 , 你获得一个对象后,也不能通过对象使用this指针 。所以,我们也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置) 。当然,在成员函数里 , 你是可以知道this指针的位置的(可以&this获得),也可以直接使用的 。#6:每个类编译后,是否创建一个类中函数表保存函数指针,以便用来调用函数?普通的类函数(不论是成员函数,还是静态函数) , 都不会创建一个函数表来保存函数指针的 。只有虚函数才会被放到函数表中 。但是,既使是虚函数,如果编译器能明确知道调用的是哪个函数,编译器就不会通过函数表中的指针来间接调用,而是会直接调用该函数 。# 7:这些编译器如何做到的?8:能否模拟实现?知道原理后,这两个问题就很容易理解了 。其实,模拟实现this的调用,在很多场合下 , 很多人都做过 。例如,系统回调函数 。系统回调函数有很多,如定时,线程啊什么的 。举一个线程的例子:class Aint n;public:static void run(void* pThis)A* this_ = (A*)pThis;this_->process();}void process()};main()A a;_beginthread( A::run, 0, &a );}这里就是定义一个静态函数来模拟成员函数 。也有许多C语言写的程序,模拟了类的实现 。如freetype库等等 。其实,有用过C语言的人,大多都模拟过 。只是当时没有明确的概念罢了 。如:typedef struct studentint age;int no;int scores;}Student;void initStudent(Student* pstudent);void addScore(Student* pstudent, int score);...如果你把 pstudent改成this,那就一样了 。它相当于:class Studentpublic:int age; int no; int scores;void initStudent();void addScore(int score);}const常量可以有物理存放的空间 , 因此是可以取地址的///this指针是在创建对象前创建.this指针放在栈上,在编译时刻已经确定.并且当一个对象创建后,并且运行整个程序运行期间只有一个this指针.

    推荐阅读