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

C++this指针理解和用法

对于一个类实例来说, 你可以看到它成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。...个人理解: (ps:class类就好比这座房子,this就好比一把钥匙,通过钥匙来打开了这座房子门,那么里面的东西就随意你取用了) this是指向实例化对象本身时候一个指针,里面存储是对象本身地址...在非静态成员函数,编译器在编译时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。...例如a.fun(1)fun(&a,1) this使用:1)在类非静态成员函数返回对象本身时候,直接用return *this(常用于操作符重载和赋值、拷贝等函数)。...,即将point1对象地址传递给了this指针 b.编译器编译后原型应该是void MovePoint(Point *this, int a, int b) c.在函数体可以写成{this->x

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

C++C++入门 — 指针值nullptr

C++入门 指针指针值 在良好C/C++编程习惯,声明一个变量时最好给该变量一个合适初始值,否则可能会出现 不可预料错误,比如未初始化指针。...不论采取何 种定义,在使用指针时,都不可避免会遇到一些麻烦,比如: #include using namespace std; void func(int ) { cout...程序本意是想通过f(NULL)调用指针版本f(int*)函数,但是由于NULL被定义成0,因此与程序初衷相悖 在C++98,字面常量0既可以是一个整形数字,也可以是无类型指针(void*)常量...注意: 在使用nullptr表示指针值时,不需要包含头文件,因为nullptr是C++11作为新关键字引入 在C++11,sizeof(nullptr) 与 sizeof((void)0)所占字节数相同...为了提高代码健壮性,在后续表示指针值时建议最好使用nullptr

11710

初识指针指针指针变量、如何理解地址、指针类型意义、void*指针、野指针指针)(笔记)

2.32位平台下地址是32个bit,指针变量大小是4个字节 64位平台下地址是64个bit,指针变量大小是8个字节 三、如何理解地址: 计算机硬件单元要互相协同工作(协同:互相进行数据传递...CPU访问内存某个字节空间,必须知道这个字节空间在内存什么位置, 而因为内存字节很多,所以需要给内存编号。...可以简单理解为:32位机器就有32根地址总线,每根线只有两态, 表示0,1[电脉冲有无],那么一根线就能表示2含义,2根线就能有4种含义。...七、指针 指针是一个特殊数据类型,它值定义为NULL。指针不同于NULL整数表示,它是一个指针变量特殊值,表示该指针变量不指向任何有效内存地址。...使用指针进行解引用操作会导致程序崩溃,因为没有任何有效内存地址可供访问。在C语言中,指针主要用于表示指针变量没有指向任何有效内存地址,例如未初始化指针变量或已释放内存块。

11210

c++算法篇】指针(下)

sort(nums.begin(),nums.end()); } }; 具体讲解一下我们思路: 这里使用是一种指针技术:固定最长边(也就是数组最大值),使用两个指针来查找剩余部分可能两个较短边...,但需要找到三个或四个数组合 移除元素:从有序数组移除重复项或特定值,并返回新数组长度 快慢指针: 链表中环检测:使用快慢指针检测链表是否有环,快指针一次移动两步,慢指针一次移动一步 寻找链表中点...:使用快慢指针找到链表中间节点,快指针结束时慢指针在中点 寻找链表倒数第k个元素:快指针先移动k步,然后快慢指针共同移动,快指针到达末尾时慢指针所在位置即倒数第k个元素 前后指针: 归并排序合并步骤...左右指针: 二分查找:在有序数组查找元素,使用左右指针限定查找范围 指针方法关键在于,指针移动可以依据问题规律来减少不必要比较或计算,从而提高算法效率。...当然,指针使用需要充分理解问题性质,并巧妙设计指针移动策略。在很多问题中,指针技术都能将时间复杂度从 O(n2) 优化到 O(n),超级好用 本节内容到此结束!!感谢大家阅读!!

7310

c++算法篇】指针(上)

这样一来,所有的零都会被替换到交换过非零元素位置后面 2.复写零 题目链接:1089.复写零 题目描述: 遇到0写两遍,不能越界 算法原理 指针算法,先根据异地操作,然后优化成双指针就地操作...最终,cur 还原为最后可复写元素索引,这样我们就能在下一步逻辑从此索引处向前开始复写和移动元素。...cur 递减原因是在逆向复写过程我们会跳过这个 0,因为它已经被复写并放置在了正确位置。...题目链接:11.盛水最多容器 题目描述: 要解决这个问题,我们使用指针方法。...由于容器宽度随着指针移动而减小,所以为了有可能增加面积,我们只移动指向较短线指针(因为如果移动指向较长线指针,面积只会减小或不变)。

8210

C++ this指针理解和作用

C++ 程序到 C 程序翻译 要想理解 C++ this 指针,我们可以先把下面的 C++ 代码转换成 C 代码: ?...this 指针作用 其作用就是指向成员函数所作用对象,所以非静态成员函数可以直接使用 this 来代表指向该函数作用对象指针。 下面的例子可以很好说明 this 作用: ?...答案是正常输出 hello,你可能会好奇明明 p 指针,不应该是会程序奔溃吗?别着急,我们先把上面的代码转换 C 程序,就能理解为什么能正常运行了。 ?...那么下面这份代码执行时,就会奔溃了,因为 this 指针,使用了指针指向了成员变量 i,程序就会奔溃。 ?...小结 通过将 C++ 程序翻译成 C 程序方式,来理解 this 指针,其作用就是指向非静态成员函数所作用对象,每个成员函数第一个参数实际上都是有个默认 this 指针参数; 静态成员函数是无法使用

1K20

指针】早早开启指针大门

同向指针 移动速度相同,一般同向移动 双向指针 移动速度相同,一般相向移动 快慢指针 移动速度不同 问题1:同向指针: 图片 【力扣】1....两数之和 图片 解题; 使用同向指针,两个指针首先都指向第一个元素,然后先固定第一个指针,第二个指针向后遍历,判断两个指针指向数组元素之和是否等于给定目标和值,如果不等,等第二个指针遍历完后...j < sz; j++) { if (a[i] + a[j] == key) { printf("在数组%...问题2:双向指针:(还是两数之和那题) 图片 解题: 注意到该数组原本有序,因此要小心,再思考一下下 我们可以使第一个指针指向第一个元素(左指针),第二个指针指向最后一个元素(右指针),将指针指向元素相加和目标和值比较...d和%d和为%d\n", a[left], a[right], key); break; } } return 0; } 问题3:快慢指针

57130

指针传说

指针,号称天下最强刺客。 他原本不叫这个名字,指针原本复姓异常,指针只不过是他武器,但他杀戮过多,渐渐地人们只记住了指针这三个字。...我打听了很久,原来指针是异常组织三代嫡传,异常组织是这个世界上最恐怖杀手组织,指针就是异常现在最出色刺客。...听说指针出生时候,脖子上就挂着一根针,整个 Java 大陆雪下一月不停,Linux 森林多块陆地直接沉陷,于是他父亲 RuntimeException 就给他起了指针这个名字。...指针出生天生异象也引起了异常组织高层注意,听说他祖父 Exception,还有整个异常组织领军人物 Throwable 都亲自接见了指针,并且认为指针天赋异禀,未来可期。...这个名字可真长,我听说过他,据传闻他实力也非常之强,可能不下于指针,都是以诡异出手角度著称,不过相比于指针大名,他好像更低调,难怪在皇宫当个老太监一般。 我也不在多想,点点头,走进了房间。

73710

指针传说

指针,号称天下最强刺客。 他原本不叫这个名字,指针原本复姓异常,指针只不过是他武器,但他杀戮过多,渐渐地人们只记住了指针这三个字。...我打听了很久,原来指针是异常组织三代嫡传,异常组织是这个世界上最恐怖杀手组织,指针就是异常现在最出色刺客。...听说指针出生时候,脖子上就挂着一根针,整个 Java 大陆雪下一月不停,Linux 森林多块陆地直接沉陷,于是他父亲 RuntimeException 就给他起了指针这个名字。...指针出生天生异象也引起了异常组织高层注意,听说他祖父 Exception,还有整个异常组织领军人物 Throwable 都亲自接见了指针,并且认为指针天赋异禀,未来可期。...这个名字可真长,我听说过他,据传闻他实力也非常之强,可能不下于指针,都是以诡异出手角度著称,不过相比于指针大名,他好像更低调,难怪在皇宫当个老太监一般。 我也不在多想,点点头,走进了房间。

67520

Android TextView setText 指针异常

第一次发现这问题,记录一下,在适配器里面给TextView设置一个int类型值,然后闪退报错,DeBug模式下查看了布局和id,均没有问题,再次查看日志输出,Caused By: android.content.res.Resources...$NotFoundException:String resource ID #0x86,发现有两个词引起了注意String Resources,才知道TextView在内部实现时设置类型为String...,所以用String.valueOf(),这里再啰嗦几句,在String类型转化问题上,String.valueOf()效率最高,因为虚拟机对它进行了特殊处理,其次是toString,最后是+""拼接形式...,拼接String形式内部实现其实就是toString,但是要相对复杂一些,拼接过程中产生了常量和一些判断条件,效率低下,详情见源码

1.7K10

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

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

26220

进一步理解指针2:指针指针数组和数组指针

进一步理解指针2:指针指针数组和数组指针.pdf 1. 概念 1.1. 指针 对于“p + 1”,这里“1”是啥?...指针 指向一个指针指针。 1.2. 指针数组 由指针值组成数组,也就是说数组每个元素值数据类型均为指针类型,如:int* p[2]; 1.3. ...假设: int** b1; int** b2 = b1 + 1; 上述“1”实际是多少?这个就要看b1类型是什么?在这里,b1是一个指针,也就是指向指针指针。...本质上就是一个指针,因此在32位平台上它值是4,在64位平台上它值是8。 5. 初始化 如何来初始化指针指针数组和数组指针?...数组、指针指针关系图 8.2. 数组和指针关系图 8.3.

1.5K10

C++this指针本质

一直以来对C++this不理解,只知道在构造函数,如果构造函数参数和类成员名字一样的话,就可以用this指针来区分,如: this->a = a; 一直以来都有这个疑问:this究竟是什么?...从刚才代码,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++指针就是地址,因此很容易想到,this也是一个地址。但是问题来了,this是谁地址呢?...我们看下面这个很简单C++程序: #include class A { public: A(); }; A::A() { std::cout << "this...::endl; } int main() { A a; std::cout << "&a " << &a << std::endl; return 0; } 大家先在自己脑袋运行一下这个程序...我们可以看到,this和&a结果是一样。由此可以看出,this就是a地址,而a是类A一个对象,占用了sizeof(A)内存空间。

74330

浅析C++this指针

CNullPointCall * pNull = NULL; // 没错,就是给指针赋值为 pNull -> Test1(); // call 1 pNull...看call 3那行C++代码汇编代码就可以看到this指针跟一般函数参数区别:一般函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...在类非成员函数如果要用到类成员变量,就可以通过访问ecx寄存器来得到指向对象this指针,然后再通过this指针加上成员变量偏移量来找到相应成员变量。...: 1、将ecx寄存器值压栈,也就是把this指针压栈。...通过上面的分析,我们可以从底层了解了C++this指针实现方法。虽然不同编译器会使用不同处理方法,但是C++编译器必须遵守C++标准,因此对于this指针实现应该都是差不多

73310

C++关于指针初始化和使用NULL理解

1、严禁使用未被初始化指针C++创建指针时候,只分配存储地址内存,并不会分配存储数据内存,所以指针可能指向任何位置。   ...(1)使用解除运算符(*)之前,一定要对指针初始化,否则若声明指针刚好指向程序代码位置会导致一些很隐蔽错误。    (2)未被初始化之前禁止指针之间赋值。...2、对NULL理解 一开始想不明白:如果给一个指针初始化成NULL之后不是就代表,指针指向一块内存单元了吗,那应该可以直接往里面填值,可是实际却不可以。...首先看一下百科中一段关于NULL描述: NULL出现是一种约定俗成,事实上它不是C语言中关键字;把一个指针赋值为NULL,通常说法是“将指针悬空”。这样,指针就无法再进行任何数据访问了。...引用网友win_hate在话题“关于NULL不严谨”的话来说:“如果说有谁不严谨了,那必定是读取0位置程序员,而不是C。

2.7K100

c++ this指针详解

大家好,又见面了,我是你们朋友全栈君。 this 是 c++一个关键字,也是一个常量指针,指向当前对象,也就是当前对象首地址。通过this指针,可以访问当前对象成员变量和成员函数。...this指针类型是 类类型* const 2. this指针并不是对象本身一部分,不会影响sizeof结果 3. this作用域在类成员函数内部 4....只有在类非静态成员函数才可以使用this指针 所谓的当前对象,就是正在使用对象,例如stu.print(); stu 就是当前对象,系统正在访问stu成员函数print() 假设this指向stu...上面的例子创建stu1时,this指针就指向了stu1所在内存块首字节,创建stu2时,this指针就指向了stu所在内存块首字节… 现在添加下面的函数 用来输出this值,验证this值与...在《C++函数编译原理和成员函数实现》讲到,成员函数最终被编译成与对象无关普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数添加一个额外参数,把当前对象首地址传入,以此来关联成员函数和成员变量

56050

解决Java开发异常:指针异常(NullPointerException)

在Java开发指针异常(NullPointerException)是一种常见而又令人头痛问题。当我们试图访问一个对象属性或调用对象方法时,就会触发指针异常。...在本文中,我们将探讨空指针异常原因、如何避免它以及解决这一问题最佳实践。 1. 指针异常原因 指针异常通常是由于对一个值为null对象进行操作而引起。...例如: String myString = null; int length = myString.length(); // 这里将会触发指针异常 在上面的例子,myString被赋值为null,然后我们尝试调用它...最佳实践:日志记录 在解决指针异常时,良好日志记录是非常有帮助。...; } 指针异常是Java开发中常见一个问题,但通过遵循一些简单最佳实践,我们可以有效地避免或者迅速解决这个问题。

2.8K10
领券