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

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

@Author:Runsen C++ 指针学习起来有点难,但是很重要。一些 C++ 程序使用指针更容易执行,另外其他 C++ 程序,例如动态内存分配,没有指针就无法执行。...不同数据类型的指针之间的唯一区别是指针指向的变量或常量的数据类型。 C++ 使用指针 象征 名称 描述 &(与号) 地址运算符 确定变量的地址。 ∗(星号) 间接运算符 访问地址的值。...变量Var的值: 5 变量Var的存储的地址ip: 0x61fe14 访问指针可用地址处的值:5 请注意,0x0相当于0....指针的概念 指针有很多但很简单的概念,它们对 C++ 编程非常重要。以下是 C++ 程序员应该清楚的几个重要的指针概念 - 指针 说明 空指针 C++ 支持空指针,它是几个标准库定义的零值常量。...将指针传递给函数 通过引用或通过地址传递参数都允许被调用函数调用函数更改传递的参数。 从函数返回指针 C++ 允许函数返回指向局部变量、静态变量动态分配的内存的指针

38520

C++ extern 数组指针

一次使用 extern 声明全局变量的过程,因为数组指针的混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含的)文件的全局变量。...而指针是一个普通的变量,变量的值存放的是数组的地址。虽然数组名指针都可以进行元素访问,但是其本质是有很大区别的!...这里问题就出现了:由于在这个文件声明的 a 是一个指针变量而不是数组,链接器的行为实际上是把指针 a 自身的地址定位到了另一个 .c 文件定义的数组首地址之上,而不是我们所希望的把数组的首地址赋予指针...通过上述分析,我们得到的最重要的结论是:使用 extern 修饰的变量链接的时候只找寻同名的标号,不检查类型,所以才会导致编译通过,运行时出错。...因此如果是多个文件链接在一起的情况,通常是 cpp 文件定义全局变量,而在另外一个 cpp 文件中使用时通过 extern 声明该变量。

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

C++设计使用智能指针

为一个C++用户的。使用指针可以算的上是常态,但在使用过程。多的时间,可能是由于new要么malloc对象,上次忘记的释放结束(我会犯这样一个错误)。内存泄露。...通常情况下,我们会自己去设计一个智能指针类去管理自己的指针对象。 事实上其原理是存储指向动态分配的指针对象类。通过引用计数的功能去控制,去正确的实现指针对象的销毁,从而避免内存泄露。...智能指针的原理是。通过指针一个引用计数关联起来,而引用计数计算,当前指针被多少个对象所共享。...SmartPtrt2(t1); SmartPtrt3(new Stub); t3=t2; t1->print(); (*t3).print(); return 0; } 面的代码...,智能指针一般都会去重载->*操作符,从而使其表现指针的表象,而且大家能够使用它像使用指针一样。

36430

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).成员变量名 C++...类 , 定义了 成员变量 age height , 构造函数 中进行初始化 , 可以使用 this-> age 访问 age 成员变量 , 使用 this->height 访问 height

23620

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++函数编译原理成员函数的实现》讲到,成员函数最终被编译成与对象无关的普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数添加一个额外的参数,把当前对象的首地址传入,以此来关联成员函数成员变量

50350

C++this指针的本质

一直以来对C++的this不理解,只知道构造函数,如果构造函数的参数类成员的名字一样的话,就可以用this指针来区分,如: this->a = a; 一直以来都有这个疑问:this究竟是什么?...从刚才的代码,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,CC++指针就是地址,因此很容易想到,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)的内存空间。

73830

浅析C++的this指针

this作用域是类内部,当在类的非静态成员函数访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。...,虽然编译器会给这两个函数传递this指针,但是它们并没有通过this指针访问类的成员变量,因此call 2call 3两行代码可以正确调用;而对于成员函数Test4()要访问类的成员变量,因此要使用...看call 3那行C++代码的汇编代码就可以看到this指针跟一般的函数参数的区别:一般的函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...类的非成员函数如果要用到类的成员变量,就可以通过访问ecx寄存器来得到指向对象的this指针,然后再通过this指针加上成员变量的偏移量来找到相应的成员变量。...通过上面的分析,我们可以从底层了解了C++this指针的实现方法。虽然不同的编译器会使用不同的处理方法,但是C++编译器必须遵守C++标准,因此对于this指针的实现应该都是差不多的。

72610

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

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

1.3K60

C++指向结构体变量的指针

C++通过指向结构体变量的指针引用结构体变量的成员 C++,一个结构体变量的指针就是该变量所占据的内存段的起始地址,指针变量也可以用来指向结构体数组的元素。 ...C++提供了指向结构体变量的运算符->,例如: p->num;//表示指针p当前指向的结构体变量的成员num p->num (*  p).num 等价,同样,p->namep->name等价于(*p...C++,以下3种形式等价:  结构体变量.成员名,如stu.num。 (*p).成员名,如( *p).num。 p->成员名,如p->num,->称为指向运算符。 ...++p->n;//得到p指向的结构体变量的成员n的值,并使之加1,然后再使用它。 经典案例:C++指向结构体变量的指针。...C++指向结构体变量的指针 更多案例可以go公众号:C语言入门到精通

2.7K118

c++对象特性this指针

对象特性: 成员变量成员函数分开存储 #include using namespace std; class wood { public: int num; //非静态成员变量...sizeof(d) << endl; //当有了非静态成员变量num是,占用内存:4 cout << sizeof(d) << endl; //当再添加一个func函数后,占内存不变,因为成员函数成员函数分开存储...d) << endl; //静态成员变量不是内对象,不算类对象内存大小 cout << sizeof(d) << endl; system("pause"); return 0; } this指针...this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数类的指针 this指针无需定义可直接使用 用途: 1.当形参成员变量相同时,可用this进行区分 2.类的非静态成员返回对象本身...NUM){} wood& addNum(wood &w1) { this->num += w1.num; //num不为共享,一个是对象w1的num,一个是w2的num //this指向w2的指针

21910

C++ 命名 Mangling extern “C

C++ 编译器在生成目标代码时如何区分不同的函数——它通过添加有关参数的信息来更改名称。这种向函数名称添加附加信息的技术称为Name Mangling。...不支持函数重载,因此,当我们 C++ 链接 C 代码时,我们必须确保符号的名称不被更改。...从 C++ 链接时如何处理 C 符号? C ,名称可能不会被修改,因为它不支持函数重载。那么当我们 C++ 链接 C 代码时,如何确保符号的名称不被更改。...解决方案:  C++ 的 Extern “C” 当一些代码被放入 extern “C” 块时,C++ 编译器确保函数名是未修改的——编译器发出一个名称不变的二进制文件,就像 C 编译器会做的那样。...由于 C++ 支持函数重载,因此必须在函数名称添加附加信息(称为 Name mangling)以避免二进制代码的冲突。  2.  C 不能更改函数名称,因为它不支持函数重载。

1.1K40

C++指针用法汇集

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

11410

C++访问权限

众所周知,C++面向对象的三大特性为:封装,继承多态。下面我们就先对封装做一些简单的了解。封装是通过C++的类来完成的,类是一种将抽象转换为用户定义类型的工具。..."circle" 类,由于变量 public_L,public_H get_Square 都是公有权限,因此类内类外均可访问,下面这两种写法均正确: circle C1; //实例化类对象 double...,即 get_Square() 能够访问类外下面的写法是错误的: int S_3 = C1.private_H * C1.private_L; //Error:成员变量不可访问 同理,对于保护权限的变量...那么通过上述分析, son1 的访问权限与父类一致; son2 只能在类内访问父类的成员,但是他的子类也可以通过public或者protected继承的方式访问到父类 "circle" 的成员 son3...,protected权限 son3 s3; s3.get_Square(); //Error:成员变量不可访问,private权限 C++,类既可以用class 定义,也可以用struct定义。

92000

C++对象模型this指针详解

这篇文章主要介绍了详解C++对象模型this指针,是C++入门学习的基础知识,需要的朋友可以参考下,希望能够给你带来帮助对象模型成员变量成员函数分开存储一、只有非静态成员变量才属于类的对象上空对象占用字节为...,非静态成员函数不属于类对象上五、static voidfunc(){}静态成员函数也不会增加 不属于类对象上this指针用于区分类多个对象调用函数时,分别都是哪个函数调用自己。...用途:1.当形参成员变量同名时,可用this指针来区分2.类的非静态成员变量返回对象本身,可使用return *this一、class Person{public:Person(int age)/.../变量{//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决变量的名称冲突this->age = age;//前一个为成员变量,后一个age为形参}int age;};void...原文链接:https://www.mimisucai.com/teach/c/35741.html

21100
领券