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

C++this指针使用方法.

this指针仅仅能在一个类成员函数调用,它表示当前对象地址。...在C++,类和结构是仅仅有一个差别的:类成员默认是private,而结构是public。 this是类指针,假设换成结构,那this就是结构指针了。...#5:我们仅仅有获得一个对象后,才干通过对象使用this指针,假设我们知道一个对象this指针位置能够直接使用吗? this指针仅仅有在成员函数才有定义。...因此,你获得一个对象后,也不能通过对象使用this指针。所以,我们也无法知道一个对象this指针位置(仅仅有在成员函数里才有this指针位置)。...当然,在成员函数里,你是能够知道this指针位置(能够&this获得),也能够直接使用。 #6:每一个类编译后,是否创建一个类函数表保存函数指针,以便用来调用函数?

1.2K20

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++

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

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)内存空间。

73930

浅析C++this指针

,虽然编译器会给这两个函数传递this指针,但是它们并没有通过this指针来访问类成员变量,因此call 2和call 3两行代码可以正确调用;而对于成员函数Test4()要访问类成员变量,因此要使用...看call 3那行C++代码汇编代码就可以看到this指针跟一般函数参数区别:一般函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...下面再通过另外一个例子来说明this指针是怎样被传递到成员函数中和如何使用this来访问成员变量。...: 1、将ecx寄存器值压栈,也就是把this指针压栈。...通过上面的分析,我们可以从底层了解了C++this指针实现方法。虽然不同编译器会使用不同处理方法,但是C++编译器必须遵守C++标准,因此对于this指针实现应该都是差不多

72610

c++ this指针详解

大家好,又见面了,我是你们朋友全栈君。 this 是 c++一个关键字,也是一个常量指针,指向当前对象,也就是当前对象首地址。通过this指针,可以访问当前对象成员变量和成员函数。...只有在类非静态成员函数才可以使用this指针 所谓的当前对象,就是正在使用对象,例如stu.print(); stu 就是当前对象,系统正在访问stu成员函数print() 假设this指向stu...上面的例子创建stu1时,this指针就指向了stu1所在内存块首字节,创建stu2时,this指针就指向了stu所在内存块首字节… 现在添加下面的函数 用来输出this值,验证this值与...切记: ~~this 是常量指针,它值不能被修改 ~~this 只能在成员函数内部使用 ~~只有对象被创建后this才有意义,因此不能再static成员函数中使用 实际上,this指针是作为函数参数隐式传递...在《C++函数编译原理和成员函数实现》讲到,成员函数最终被编译成与对象无关普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数添加一个额外参数,把当前对象首地址传入,以此来关联成员函数和成员变量

50550

C++指针c++指针使用注意点

c++指针使用注意点 避免野指针产生 “野指针成因主要有: 1)指针变量没有被初始化。...任何指针变量刚被创建时不会自动成为NULL指针,它缺省值是随机,它会乱指一气。所以,指针变量在创建同时应当被初始化,要么将指针设置为NULL,要么让它指向合法内存。...("abcd")=4>3,越界 3 delete []p; //ok d.返回值是指针 问题:数组p[]内容为“hello world”,存储在栈区,函数结束时内容被清除,p变为野指针...e.指针做形参 即所谓地址传递,我们都知道地址传递方式,形参改变会导致实参改变,但要注意是,这里改变是指指针所指内容改变,而不是指针改变。...} main函数和fun函数"abc"、"cba"都是存放在文字常量区,是具有各自编号地址。可以自己调试用printf("%p\n",p);打印出地址,可以看到两个不同地址。

1.4K30

C++指针使用

大家好,又见面了,我是全栈君 C++指针使用好坏直接反映了编程人员水平高低,下面从指针和数组区别、指针参数是如何传递内存、野指针、malloc/free、new/delete和内存耗尽怎么办方面进行总结...一 指针和数组对比   C++/C程序指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价。数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。...如果函数体内程序修改了_p内容,就导致参数p内容作相应修改。这就是指针可以用作输出参数原因。   在上面的例子,_p申请了新内存,只是把_p所指内存地址改变了,但是p丝毫未变。...(2)解决方法1:使用指向指针指针 void GetMemory2(char **p, int num) {  *p = (char *)malloc(sizeof(char) * num); }... }  p->Func(); // p是“野指针” } 四 malloc/free/new/delete   malloc与free是C++/C语言标准库函数,new/delete是C++运算符。

62510

C++定义指针变量 | 使用指针变量

C++指针变量定义 C++规定所有变量在使用前必须先定义,即指定其类型,在编译时按变量类型分配存储空间,对指针 变量必须将它定义为指针类型。...即*不是指针变量名一部分,在定义变量时在变量名前加一个*表示该变量是指针变量。 在C++怎样使一个指针变量指向另一个变量呢?...只需要把被指向变量地址赋给指针变量即可: point_num1=&i; 在C++,一般编译系统为每一个指针变量分配4个字节存储单元,用来存放变量地址, 在定义指针变量时要注意:  不能用一个整数给一个指针变量赋初值...在定义指针变量时必须指定基类型。 经典案例:C++定义指针变量。...C++定义指针变量 | 使用指针变量 更多案例可以go公众号:C语言入门到精通

2.6K2420

C++指针用法汇集

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

11510

C++基础 指针使用注意

手动分配手动回收 程序在运行时候需要内存,在c/c++,栈上内存(如函数局部非静态变量)在使用完之后,操作系统会帮我们自动回收,而通过动态分配得到 堆上内存 ,需要手动释放。...建议:函数中使用指针参数前,应使用if(p==NULL) 或if(p!=NULL)进行防错处理。 警惕野指针指针也叫悬挂指针,是指向“垃圾”内存指针使用“野指针”会让程序出现不确定行为。...建议:定义指针变量时候尽量初始化,哪怕初始化为NULL也好 不应返回局部变量地址 c/c++,局部变量是存放在栈,它特点是随函数调用时创建随函数结束时销毁,因此在程序中将局部变量地址返回后赋值给一个指针...类析构函数没有被执行,可推知delete语句并没有得到执行。此程序在catch中加个delete 可解决问题,但对于一个庞大工程时候,很难找出异常位置。更好解决方法是使用 智能指针。...建议:C++代码代码多注意使用智能指针。 参考:https://mp.weixin.qq.com/s/I3hqH0zPcSctlR6b0Sn1qA

69810

C++this指针理解和用法

对于一个类实例来说, 你可以看到它成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。...因为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

64030

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

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

1.3K60

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

1、严禁使用未被初始化指针C++创建指针时候,只分配存储地址内存,并不会分配存储数据内存,所以指针可能指向任何位置。   ...(1)使用解除运算符(*)之前,一定要对指针初始化,否则若声明指针刚好指向程序代码位置会导致一些很隐蔽错误。    (2)未被初始化之前禁止指针之间赋值。...编程工作中有一类比较容易犯错误--指针地址未进行正确更新赋值就加以使用,这往往会造成很严重后果(对内存区进行错误涂抹)。...引用网友win_hate在话题“关于NULL不严谨”的话来说:“如果说有谁不严谨了,那必定是读取0位置程序员,而不是C。...也就是说将指针赋值成NULL有些编译器是不能往里边填值,所以要使用new来分配一段合适内存才可以填值,而且使用new申请内存还可以使用delete进行配对删除,可以防止内存泄露。

2.7K100

C++this指针

大家好,又见面了,我是你们朋友全栈君。 C++this指针 当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。...C++在初始化对象时,每个对象数据成员都会得到系统分配自己独立存储空间。...那么问题来了,当一个对象调用自己成员函数时,如何保证成员函数对数据成员处理是自己数据成员而不是其他对象数据成员呢? 那么我们就会使用this指针。...5、只有在类非静态成员函数才可以使用this指针, 其它任何函数都不可以。 6、this指针时刻指向对象 。 7、当this指针指向空时,是不会指向对象。...this指针用处: 1.在类非静态成员函数返回类对象本身时候,直接使用 return *this 2.当参数与成员变量名相同时,如this->n = n (不能直接写n = n)。

55020

C++ extern 数组和指针

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

21100

详解 C++ 11 智能指针

C/C++ 语言最为人所诟病特性之一就是存在内存泄露问题,因此后来大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言使用者屏蔽了内存指针这一概念。...C++ 新标准各种智能指针是如此实用与强大,在现代 C++ 项目开发,读者应该尽量去使用它们。...A* m_pA; }; 同样道理,在头文件使用智能指针对象作为类成员变量时,也应该优先使用前置声明去引用智能指针对象包裹类,而不是直接包含包裹类头文件。...); ~Test(); private: std::unique_ptr m_spA; }; C++ 新标准智能指针我想介绍就这么多了,Modern C/C++ 已经变为 C.../C++ 开发趋势,希望读者能善用和熟练使用本节介绍后三种智能指针对象。

2.7K31

C++ const 和 constexpr关键字解析:常量、函数和指针

很多C++初学者看到const这个关键字第一反应都是一头雾水,主要是因为const可以出现在很多位置,以及后面加入constexpr更是常常感到困惑,今天就为大家一一解释出现它们含义和以及作用...很多全局变量都是通过常量来进行修饰,需要注意是,使用const关键字修饰变量需要立刻初始化 // 修饰局部变量,全局变量,成员变量 const int a = 2; // 错误,表达式必须是可修改左值...num) { // 错误,表达式必须是可修改左值,意思就是参数num是个常量,无法修改 num = 3; } 修饰指针 虽然指针也是一种变量,不过当const与指针出现在一起时候...所以通常不会这么使用。...,通常用于函数参数列表,因为我们知道在C++函数参数有3传递方式,分别是值传递,指针传递(或者叫地址传递),引用传递,前两种在传递时都会发成拷贝行为 指针本身也是一个变量,在32位操作系统下占用

69920

C++智能指针正确使用方式

但是在实际使用过程,很多人都会有这样问题: 不知道三种智能指针具体使用场景 无脑只使用shared_ptr 认为应该禁用raw pointer(裸指针,即Widget*这种形式),全部使用智能指针...本文试图理清楚三种智能指针具体使用场景,并讲解三种智能指针背后性能消耗。...C++引入了智能指针,也是为了更好描述对象所有权,简化内存管理,从而大大减少我们C++内存管理方面的犯错机会。...性能 因为C++zero cost abstraction特点,unique_ptr在默认情况下和裸指针大小是一样。 所以内存上没有任何额外消耗,性能是最优。...只在函数使用指针,但并不保存 假如我们只需要在函数,用这个对象处理一些事情,但不打算涉及其生命周期管理,不打算通过函数传参延长shared_ptr生命周期。

9.8K41

c++指针函数使用——回调函数

1 /* 2 3 函数指针 4 5 函数也是有地址 6 7 所谓函数指针,就是指向函数指针,函数指针也是一个变量,可以指向不同函数。...x = pf(3, 4);//通过函数指针pf调用函数add (使用函数指针不必像使用一般指针那样解引用) 35 int x = (*pf)(3, 4);//函数指针解引用 这样做好处可以明确指明...同普通指针一样,如果 44 //没有明确初始化,则函数指针值将是一个随机数,使用这样指针非常危险。...因此在使用函数指针之前对其进行初始化或着赋一个初值,即将一个函数名赋给 45 //该函数指针变量 46 cout << fun_ptr(7, 8)<<endl; 47 48 49...system("pause"); 50 return 0; 51 } 1 /* 2 3 指针函数使用——回调函数 4 5 6 */ 7 #include<cstdlib

1.8K60
领券