C++ 指针 技术教程文章

c++ this指针详解【代码】

总结 在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。 C++ 程序到C程序的翻译 C++ 是在C语言的基础上发展而来的,第一个 C++ 的编译器实际上是将 C++ 程序翻译成C语言程序,然后再用C语言编译器进行编译。 C语言没有类的概念,只有结构,函数都是全局...

C++delete一个指针之后为什么要设置为nullptr【代码】【图】

C++delete一个指针之后为什么要设置为nullptr本文转载自:使用delete 删除指针,真的删除了吗 我们在用动态内存分配时,可以使用new在动态内存中为对象分配空间并返回一个指向该对象的指针,比如说int* ptr = new int(1);,在自由空间构造一个int型对象,并返回指向该对象的指针给int* ptr。(注意:ptr只是一个变量,就像是int a=1;中的a一样,不过a是整形变量,而ptr是指针变量)。 为了防止内存耗尽,在动态内存使用完毕后,我...

C++基础(十三)函数指针【代码】【图】

函数指针,指向函数的指针,顾名思义,其本质还是一个指针!可以对其进行赋值(包括nullptr),当然也能判断是否为空。 函数的类型,由它的返回类型和形参类型、形参个数共同决定,与函数名无关。所以函数指针,也只关心这些。 1、定义 定义一个函数指针,只需要指定返回值类型和形参(包括个数和类型)。在返回值和形参类型中间,加上函数指针的变量名,以及"*",并用一对小括号包起来即可。如下: 返回类型 (*函数指针名)(形参) 例如...

C++ STL 四种智能指针【代码】【图】

文章目录 0.前言1.unique_ptr2.auto_ptr3.shared_ptr 3.1 shared_ptr 简介3.2 通过辅助类模拟实现 shared_ptr 4.weak_ptr 4.1 weak_ptr 简介4.2 weak_ptr 用法4.3 weak_ptr 的作用 5.如何选择智能指针参考文献 0.前言 C++ 标准模板库 STL(Standard Template Library) 一共给我们提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,其中 auto_ptr 是 C++98 提出的,C++11 已将其摒弃,并提出了 unique_ptr 替代 ...

C++(9)--指针【代码】

指针 1.指针的基本概念1.1指针的简介1.2指针的声明及初始化1.3取地址符号&1.4间接运算符* 2.空指针、void指针2.1空指针2.2void *ptr 3.指针和引用4.指针和数组4.1 使用指针的递增和递减访问数组4.2 指针与数组使用的一些注意点《老九学堂C++课程》《C++ primer》学习笔记。《老九学堂C++课程》详情请到B站搜索《老九零基础学编程C++入门》-------------简单的事情重复做,重复的事情用心做,用心的事情坚持做(老九君)-------------...

【C++】指针和引用的区别、野指针的触发与避免

目录参考资料 参考资料 -c++中,引用和指针的区别是什么?野指针的定义. 如何避免野指针. 利用腾讯的面试题来解释野指针,简单易懂.析构函数的理解 关于new的理解值为NULL的对象指针

C++ void类型指针的使用【代码】

# include <iostream>using namespace std;int main(){void * pv; // 声明void类型的指针 int i = 10;pv = &i; // void 类型指针指向整型变量 int *pint = static_cast<int *>(pv); // void 类型指针赋值给 int类型指针 cout << "*pint = " << *pint << endl;return 0; } 运行结果: *pint = 10注:void指针一般只在指针所指向的数据类型不确定时使用。

小甲鱼-C++ 10 指针和数组【代码】

①指针和数组 1、数组的名字其实也是一个指针(指向数组的基地址,就是第一个元素的地址) --- int *ptr1 = &myArray[0]; --- int *ptr2 = myArray; 2、访问其他元素: ptr1++; 注意以上不是简单的对地址值进行+1处理,它是按照指向的数组的数据类型来递增的,也就是+sizeof(int) #include <iostream>using namespace std;int main() {const unsigned short ITEMS = 5;int intArray[ITEMS] = {1, 2, 3, 4, 5};char charArray[ITEMS] ...

C++11特性-智能指针详解【代码】

动态内存的使用很容易出问题,因为确保在正确的时间释放内存是极为困难的。有时我们会忘记释放内存产生内存泄漏,有时提前释放了内存,再使用指针去引用内存就会报错。 为了更容易(同时也更安全)地使用动态内存,新的标准库提供了两种智能指针类型来管理动态对象。智能指针的行为类似常规指针,区别在于它负责自动释放所指向的对象。这两种智能指针的区别在于管理底层指针的方式:shared_ptr 允许多个shared_ptr类型指针指向同一...

C++11智能指针【代码】【图】

Smart pointer 会不会比Raw pointer效率低?想把智能指针用成瓶颈的话,基本上是不可能的,不要过度担心Smart pointer 不用自己管理内存了,是不是对c++程序员要求低了显然是要求更高了,想要用好智能指针的前提是会熟练使用裸指针,而且要了解智能指针的实现原理,要根据实际情况去选择shared_ptr及unique_ptr。智能指针使用不当同样会内存泄漏 unique_ptr使用 unique 顾名思义 ownership 唯一 1.推荐使用make_unique进行初始化(...

【C/C++】指针用法详解【代码】【图】

定义与初始化定义:int *p=&a; 初始化:int *p ; p=&a;也就是说,定义时使用int p表示定义p为一个指针变量;而使用时,p代表地址,p代表其内容。 char a[ ]和char *achar a[ ] 内容可变,地址不可变 char *const p,是指针常量const char *a 内容不可变,地址可变 const char *p,是指针变量char *a 内容不可变,地址可变这里“地址”指a的值。 这里“内容不可变”指不可以编辑*a的具体某一个单元。 注意:char const *p=const cha...

【3】C++语法与数据结构之MFC_CList学生管理系统_链表外排序_函数指针【代码】

注意:此时排序规则函数定义为全局函数 C++中定义CStudent类 文件名:Student.h #pragma once #include <afxtempl.h> typedef struct SUser {int nNumb;char sName[20];float fMath; }DATA;typedef bool(*BY_FUNC)(DATA& q,DATA& m);class CStudent {CList<DATA> m_list;int Menu();int Input();void Delete();void Modify();void Print();void Sort(BY_FUNC pFunc);int SortMenu();void Load();void Save();void PrintPS(POSITION...

C++之指针探究(三):指针数组和数组指针【代码】【图】

前文:C++之指针探究(二):一级指针和一维数组 一. 指针数组或: 指针数组的本质是数组,数组中每一个成员是一个指针。定义形式如下: ??char?\ast? pArray[10]; 语法解析:pArray 先与“[ ]”结合,构成一个数组的定义,char?\ast?修饰的是数组的内容,即数组的每个元素。 例4: 运行结果:附例4代码 //小问学编程 #include <iostream> using namespace std;int main() {char* pArray[] ={"apple","pear","banana","orange","pin...

11.C++引用,引用和指针的区别,把引用作为参数,把引用作为返回值(被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,可以返回一个对静态变量的引用)【代码】【图】

C++引用 引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。 引用和指针的区别 引用很容易与指针混淆,它们之间有三个主要的不同: 可以有空指针,但不能有空引用,引用必须连接到一块合法的内存。引用一旦被初始化为某对象,就不能被指向到另一个对象,而指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间...

C/C++函数指针总结【代码】

一 、函数指针介绍 函数指针指向某种特定类型,函数的类型由其参数及返回类型共同决定,与函数名无关。举例如下: int add(int nLeft,int nRight);//函数定义 该函数类型为int(int,int),要想声明一个指向该类函数的指针,只需用指针替换函数名即可: int (*pf)(int,int);//未初始化 则pf可指向int(int,int)类型的函数。pf前面有*,说明pf是指针,右侧是形参列表,表示pf指向的是函数,左侧为int,说明pf指向的函数返回值为int。则...

[C / C++] 关于指针置空和野指针问题的思考.【代码】

前言 最近在复习数据结构,在复习到树和二叉树时,被指针置空和野指针问题给搞晕了。 看这一段前序创建二叉树的代码 void PreCreate(BiNode * b){ElementType e;printf("请输入结点的id(如果输入-1,那么就不在这个枝干上创建结点):\n");scanf("%d",&e.id);if(e.id == -1){ //如果用户输入了-1,那么将该结点的状态设为-999999,等函数返回之后释放该节点/*为什么这里不直接释放结点并置空呢比如这里写free(b);b = NULL;这样做...

C++智能指针的使用

动态内存: c++中,动态内存的管理是通过一对操作符来完成的: new- 用来为对象分配空间,并返回一个指向该对象的指针delete- 接受一个动态对象的指针,销毁该对象,并释放与之关联的内存(指针本身的地址并没有改变) 动态内存管理容易出问题,需要程序员手动释放内存。为了更容易使用动态内存,c++11新标准提出了两种智能指针:shared_ptr 和 unique_ptr。 智能指针的操作类似于普通指针,最主要的区别是它还负责自动释放所其指向...

C/C++指针(一)【代码】

指针【一】(C/C++) 1. 什么是指针 指针为C/C++中的一种变量,与常见的 int , double 等相似,只不过指针变量存储的是一段地址。因此,可以在将指针看做门牌号。C/C++中,可用以下方法定义指针 type *var_name;其中, type 是指针的基类型,它必须是一个有效的 C/C++ 数据类型, var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。 但是,在这个语句中,星号是用来指定一个变量是指针。 如下就是指针...

C++基础(十一)智能指针之unique_ptr【代码】【图】

前一篇文章介绍了共享指针shared_ptr,这篇介绍另一种智能指针:unique_ptr。 1、创建 与shared_ptr不同,C++11并没有提供类似std::make_shared的标准库函数来返回一个unique_ptr,但是C++14提供了类似的库函数:std::make_unique,语法如下: std::make_unique<类型>(参数列表) 依然以Person类为例: class Person { public:Person(const std::string& strName, int iAge) :m_strName(strName), m_iAge(iAge){}~Person(){ std::co...

c++之this指针探究【代码】【图】

this指针 ??每一个对象都隐式地“包含”一个指针指向对象自身,称之为this指针。当对象调用成员函数时,会默认将对象自身传递给该函数,在函数体内不直接使用对象名,而是使用this指针,即this指针指向该对象,指向调用者。 例1: 附例1代码 //小问学编程 #include<iostream> using namespace std; class Circle { public:Circle();void printRadiusOnly(); private:float radius;float x_center;float y_center; };Circle::Circl...