首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c++ this指针详解

this 是 c++的一个关键字,也是一个常量指针,指向当前对象,也就是当前对象的首地址。通过this指针,可以访问当前对象的成员变量和成员函数。 【特性】 1....this指针的类型是 类类型* const 2. this指针并不是对象本身的一部分,不会影响sizeof的结果 3. this的作用域类成员函数的内部 4....只有类的非静态成员函数才可以使用this指针 所谓的当前对象,就是正在使用的对象,例如stu.print(); stu 就是当前对象,系统正在访问stu的成员函数print() 假设this指向stu...对象的地址是否相同: void Student::printAddr() { cout << this << endl; } 接着main函数输出创建对象并调用函数: int main()...C++函数编译原理和成员函数的实现》讲到,成员函数最终被编译成与对象无关的普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数添加一个额外的参数,把当前对象的首地址传入,以此来关联成员函数和成员变量

62850

C++C++的 this 指针用法 ① ( C++的 this 指针引入 | this 指针用法 | 代码示例 )

一、C++的 this 指针 1、C++的 this 指针引入 C++ , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 的每个 非静态成员函数..., 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 的所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++的...this 指针用法 C++的 this 指针用法 : 使用 this 作为指针 : 非静态成员函数 , 直接使用 this 作为 本实例对象 的指针 ; this 使用 this-> 访问成员变量...: 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 的 非静态成员变量 ; this->成员变量名 *使用 (this)....访问成员变量 : 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据的成员变量 ; (*this).成员变量名 C++

27220
您找到你想要的搜索结果了吗?
是的
没有找到

浅析C++的this指针

看call 3那行C++代码的汇编代码就可以看到this指针跟一般的函数参数的区别:一般的函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...类的非成员函数如果要用到类的成员变量,就可以通过访问ecx寄存器来得到指向对象的this指针,然后再通过this指针加上成员变量的偏移量来找到相应的成员变量。...此时,this指针指向test对象,test对象只有两个int型的成员变量,test对象内存连续存放,也就是说this指针目前指向m_iValue1。...4已经说明,eax寄存器内存放的是this指针,而this指针指向连续存放的int型的成员变量m_iValue1。this指针加4(sizeof(int))也就是成员变量m_iValue2的地址。...通过上面的分析,我们可以从底层了解了C++this指针的实现方法。虽然不同的编译器会使用不同的处理方法,但是C++编译器必须遵守C++标准,因此对于this指针的实现应该都是差不多的。

73610

【小白学习C++ 教程】七、C++指针声明和指针相关概念

@Author:Runsen C++ 指针学习起来有点难,但是很重要。一些 C++ 程序使用指针更容易执行,另外其他 C++ 程序,例如动态内存分配,没有指针就无法执行。...变量Var的值: 5 变量Var的存储的地址ip: 0x61fe14 访问指针可用地址处的值:5 请注意,0x0相当于0....指针的概念 指针有很多但很简单的概念,它们对 C++ 编程非常重要。以下是 C++ 程序员应该清楚的几个重要的指针概念 - 指针 说明 空指针 C++ 支持空指针,它是几个标准库定义的零值常量。...将指针传递给函数 通过引用或通过地址传递参数都允许被调用函数调用函数更改传递的参数。 从函数返回指针 C++ 允许函数返回指向局部变量、静态变量和动态分配的内存的指针。...空指针指针变量指向内存编号为0的空间 要检查空指针,您可以使用 if 语句如下 - if(ptr) // succeeds if p is not null if(!

39420

C++指针用法汇集

1、指向对象的指针   定义:对象空间的起始地址就是对象的指针。   ...说明:在建立对象时,编译系统就为每个对象分配一定的存储空间以存放其成员,不过注意,在一般情况下不同对象的数据存储单元存放的数据成员是不相同,而不同对象的函数代码却是相同的,也就是说,它们的函数代码是共享的...这时我们可以定义一个指针变量用来存放对象的指针。   ...,假如所定义的类中有数据成员hour、minute、sec,成员函数有gettime(),则 (*p).hour 即为p指向对象的hour成员,相当于t.hour (*p).gettime() 即为p...指向对象的成员函数gettime(),相当于t.gettime()   也可以用如下形式: p->hour 和 p->gettime()和上面是等价的。

12310

C++ extern 数组和指针

一次使用 extern 声明全局变量的过程,因为数组和指针的混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含的)文件的全局变量。...现在问题是这样的: 一个 a.cpp ,有个全局变量 char a[] = "......"; 另一个 b.cpp ,我想使用这个全局变量,由于固有的思想,指针和数组名通用,偷懒写成了如下形式: extern char *a; 由此引发了一个 `segmentation fault...这里问题就出现了:由于在这个文件声明的 a 是一个指针变量而不是数组,链接器的行为实际上是把指针 a 自身的地址定位到了另一个 .c 文件定义的数组首地址之上,而不是我们所希望的把数组的首地址赋予指针...因此如果是多个文件链接在一起的情况,通常是 cpp 文件定义全局变量,而在另外一个 cpp 文件中使用时通过 extern 声明该变量。

32900

指针函数的作用

传递地址 指针传递地址时,指针变量产生了副本,但副本与原变量所指的内存区域是同一个。对指针副本指向的变量进行改变,就是改变原指针变量所指向的变量。 指向函数的指针 指针变量也可以指向一个函数。...一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。其概念与以前类似,只是带回的值的类型是指针类型而已。返回指针的函数简称为指针函数。...从函数返回指针 当我们定义一个返回指针类型的函数时,形式如下: int *fun(参数列表) { ……; return p; } p是一个指针变量,它可以是形式如&value的地址值。...指针数组 数组的元素均为指针变量的数组称为指针数组,一维指针数组的定义形式为: 类型名 *数组名 [数组长度]; 类如: int *p[4]; 指针数组的数组名也是一个指针变量,该指针变量为指向指针指针...指针数组的元素可以使用指向指针指针来引用。

2.8K20

C++设计和使用智能指针

为一个C++用户的。使用指针可以算的上是常态,但在使用过程。多的时间,可能是由于new要么malloc对象,上次忘记的释放结束(我会犯这样一个错误)。内存泄露。...而此时智能指针可能能够帮助我去解决问题。 智能指针(smart pointer)是利用个引用计数的策略去处理指针的释放,从而保证指针的安全性。...智能指针的原理是。通过将指针类和一个引用计数关联起来,而引用计数计算,当前指针被多少个对象所共享。...SmartPtrt2(t1); SmartPtrt3(new Stub); t3=t2; t1->print(); (*t3).print(); return 0; } 面的代码...函数析构的时候,我们会发现引用计数在当中所起到的作用,从而避免误操作早成指针提前释放。造成指针悬挂。或者释放不彻底,造成内存泄漏的问题。 版权声明:本文博客原创文章。博客,未经同意,不得转载。

37730

C++this指针的使用方法.

#3:this指针怎样传递给类函数的?绑定?还是函数參数的首參数就是this指针.那么this指针又是怎样找到类实例后函数的? this是通过函数參数的首參数来传递的。...this指针调用之前生成的。类实例后的函数,没有这个说法。类实例化时,仅仅分配类的变量空间,并没有为函数分配空间。自从类的函数定义完毕后,它就在那儿,不会跑的。...C++,类和结构是仅仅有一个差别的:类的成员默认是private,而结构是public。 this是类的指针,假设换成结构,那this就是结构的指针了。...#5:我们仅仅有获得一个对象后,才干通过对象使用this指针,假设我们知道一个对象this指针的位置能够直接使用吗? this指针仅仅有成员函数才有定义。...当然,成员函数里,你是能够知道this指针的位置的(能够&this获得),也能够直接使用的。 #6:每一个类编译后,是否创建一个类函数表保存函数指针,以便用来调用函数?

1.2K20

C++ this指针

this指针的类型取决于使用this指针的成员函数类型以及对象类型, 一、this指针的概念 定义 C++ ,每一个对象都能通过 this 指针来访问自己的地址。...this 指针是所有成员函数的隐含参数。因此,成员函数内部,它可以用来指向调用对象。 this只能在成员函数中使用 成员函数默认第一个参数为T* const register this。...this指针的创建 this指针成员函数的开始执行前构造的,成员的执行结束后清除。 this指针只有成员函数才有定义。 创建一个对象后,不能通过对象使用this指针。...也无法知道一个对象的this指针的位置(只有成员函数里才有this指针的位置)。当然,成员函数里,你是可以知道this指针的位置的(可以&this获得),也可以直接使用的。...二、this指针的操作 类的非静态成员函数返回类对象本身的时候,我们可以使用圆点运算符*,箭头运算符->。

55320

C++ 指针常量与常量指针

吐槽一下: 指针常量与常量指针的翻译就好比机器学习Regularization翻译成正则化一样,讲真,正则化这个说法确实要比规则化显得高端些,但是到了理解的时候,还是要按照规则化理解。...而不管是指针常量还是常量指针他们的区别其实就是const关键字的位置,下面直接根据声明方式不同解释二者的区别: 只有一个关键字const的情况下,声明有三种方式: //1 const int* p...,比如我们有一个子函数是想打印一个数组,那么我们可以将函数声明写成这样: void printfarr(const int *arr,int n); 如此,当主函数调用该子函数,并打印主函数的变量array...但是《C Primer Plus》中将第一类叫做指向常量的指针,也就是文章开头提到的pointer to const,那么第二类也就是const pointer了,但是这样一来,他就已经和百度百科的说法反了...,这样一来数据自身不能改变,指针不能该数据,指针不能指向别处。

1.6K70

详解 C++ 11 的智能指针

C/C++ 语言中,内存泄露的问题一直困扰着广大的开发者,因此各类库和工具的一直努力尝试各种方法去检测和避免内存泄露,如 boost,智能指针技术应运而生。...正因为 std::auto_ptr 的设计存在如此重大缺陷,C++11 标准充分借鉴和吸收了 boost 库智能指针的设计思想,引入了三种类型的智能指针,即 std::unique_ptr、std:...我们实际开发应该避免做出这样的逻辑设计,这种情形下即使使用了智能指针也会造成内存泄漏。也就是说一个资源的生命周期可以交给一个智能指针对象,但是该智能指针的生命周期不可以再交给整个资源来管理。...C++ 新标准的各种智能指针是如此的实用与强大,现代 C++ 项目开发,读者应该尽量去使用它们。...); ~Test(); private: std::unique_ptr m_spA; }; C++ 新标准的智能指针我想介绍的就这么多了,Modern C/C++ 已经变为 C

2.7K31

详解c++指针指针指针的引用

展示一下使用指针指针指针的引用修改传递给方法的指针,以便更好的使用它。...(这里说的指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针指针的值传递。...如果我们方法内部修改指针会出现问题,方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来 的值。...输出的是两个2 使用指针指针 展示一下使用指针指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你的需求分配内存 *p...我们看一下 func(int **p)这个方法 p:  是一个指针指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址 *p:  是被指向的指针,是一个地址。

1.3K60
领券