【C/C++野指针】教程文章相关的互联网学习教程文章

C++智能指针(精简介绍)

前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。这里只简单介绍后三种。 看完这篇精简介绍后可以去看详细介绍,C++智能指针(详细介绍) C++11智能指针介绍 智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后,会在析构函数中释放掉申请的内存,从而防止内存泄漏。 C++ 11中最常用的智能指针类型为sh...

c++ const 与 指针的小实验【代码】

指向常量的指针 有各种类型的指针,int *,char * 虽然类型不同,但它们的大小都是相同的(64位 8字节,32位4字节) 而指向常量的指针,因为其指针类型是常量,随意不能通过指针改变值 上代码#include <iostream>using namespace std;int main() {int age = 12;const int *p = &age;(*p) = 13;return 0; }使用g++编译g++ const.cpp const.cpp: In function ‘int main()’: const.cpp:10:7: error: assignment of read-only locat...

【C/C++】指针【代码】【图】

(资料来源:https://www.bilibili.com/video/BV1QE41147RT?p=101) 指针:内存地址,用于间接访问内存单元 指针变量:用于存放地址的变量 static int i ; static int* ptr = &i ;指针变量的赋值运算 语法形式:指针名 = 地址 (在该地址中存放的数据类型与指针类型必须相符) 地址可以是:通过取地址符&取得已定义的变量的起始地址动态内存分配成功时返回的地址整数零,0可以赋给指针,表示空指针,NULL就是被定义为0(C++11中可以...

PAT甲级1085 Perfect Sequence :[C++题解]双指针【代码】【图】

文章目录 题目分析题目来源题目分析来源:acwing 分析:求满足条件M≤mpM \leq m\times pM≤mp的区间[m, M]最长是多少。此处有一性质:当最大值M变大的时候,最小值m也是变大的, 它不可能变小。根据这个性质便可以是使用双指针算法:先从小到大枚举最大值M,然后最小值m也是单调增加的。 ac代码 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; typedef long long LL; int n ,p; int a[N];int main(){cin >>...

C++指针的算术运算 、关系运算【图】

下面随笔是关于指针的算术运算 、关系运算。指针类型的算术运算指针与整数的加减运算指针++,--运算指针类型的算术运算指针p加上或减去n其意义是指针当前指向位置的前方或后方第n个数据的起始位置。指针的++、--运算意义是指向下一个或前一个完整数据的起始。运算的结果值取决于指针指向的数据类型,总是指向一个完整数据的起始位置。当指针指向连续存储的同类型数据时,指针与整数的加减运和自增自减算才有意义。指针与整数相加的...

C++指针笔记【代码】【图】

下面随笔给出C++指针笔记。内存空间的访问方式通过变量名访问通过地址访问指针的概念指针:内存地址,用于间接访问内存单元指针变量:用于存放地址的变量指针变量的定义例:static int i;static int* ptr = &i;例:*ptr = 3;与地址相关的运算——“*”和“&”指针运算符地址运算符:&指针变量的初始化语法形式存储类型 数据类型 *指针名=初始地址;例:int *pa = &a;注意事项用变量地址作为初值时,该变量必须在指针初始化之前已声...

PAT甲级1112 Stucked Keyboard:[C++题解]卡住的键盘、双指针、去重【代码】【图】

文章目录 题目分析题目来源题目分析来源:acwing 分析 双指针算法来统计连续出现的字符的次数,如果 %k 不为0说明不是卡住的字母,做好标记。 再次遍历字符串,坏的输出,顺便统计正常的字符串是啥。 AC代码 #include<bits/stdc++.h> using namespace std;const int N = 200; //需要用到小写字母的ASCII码值 int st[N]; int main(){int k;cin >> k;string s;cin >> s;//双指针for(int i =0; i<s.size();i++){int j = i + 1;while...

C++ 中的智能指针-基础【代码】

简介 在现代 C++ 编程中,标准库包含了智能指针(Smart pointers)。 智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe)的。 智能指针的使用 智能指针定义在头文件 memory 里的命名空间 std 中。它对于资源获取即初始化(RAII, Resource Acquisition Is Initialization) 编程理念至关重要。该理念的目的是保证对象初始化的时候也是资源获取的时候,从而使对象的所有资源在单行代码中创建。 实践中,RA...

C++中引用与指针的关系

1.推荐使用引用 2.引用和指针的联系:关于引用的性质,如果在程序中声明了b是变量a的引用,实际上在内存中为b开辟了一个指针型的存储单元,在其中存放变量a的地址,输出引用b时,就输出b所指向的变量a的值,相当于输出*b。引用其实就是一个指针常量,他的指向不能改变,只能指向一个指定的变量。所以,引用的本质还是指针,所有引用的功能都可以由指针实现。C++之所以增加引用的机制,是为了方便用户,用户可以不必具体去处理地址...

C++系列(2)—智能指针【代码】

智能指针 智能指针是代理模式的具体应用,它使用 RAII 技术代理了裸指针,能够自动释放内存,无需程序员干预,所以被称为“智能指针” unique_ptr 理解含义实际上并不是指针,而是一个对象。所以,不要企图对它调用 delete,它会自动管理初始化时的指针,在离开作用域时析构释放内存。 它也没有定义加减运算,不能随意移动指针地址,这就完全避免了指针越界等危险操作,可以让代码更安全 表示指针的所有权是“唯一”的,不允许共享...

C++: this指针【代码】

1. this 是什么: this是一个指针,指向对象实例。 2. 作用: 既然this指针指向对象实例,那this指针就相当于对象指针。有如下用法和注意事项:this指针只能在类内部使用而不能在外部使用。 this指针可以访问类中所有public、private、protect的成员函数和变量 this指针是指向对象的实例,所以只有当对象被创建时this指针才有效,所以:this指针不能用于static函数中,因为对象未被创建 this指针是const的指针,无法被修改 3. 原...

C++基础之智能指针的自实现【代码】【图】

智能指针实现了内存的自动化管理,使用它对一段内存空间进行管理,无需我们手动去释放这段内存空间,但智能指针的原理是什么?我们自己能否自实现一个智能指针用于内存的管理和监控?基于这些疑问,我们逐一进行介绍。 智能指针说白了就是C++标准库为我们封装好的一个对象,我们使用该对象对内存资源进行管理。智能指针对象在初始化时,便完成了对指定内存空间(或者对象资源)的创建,智能指针对象析构时可以释放它所管理的内存空...

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

文章目录 0.前言1.unique_ptr2.auto_ptr3.shared_ptr 3.1 shared_ptr 简介3.2 通过辅助类模拟实现 shared_ptr4.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++智能指针

概述 shared_ptr和weak_ptr是从C++11标准库Boost中引入的两种智能指针目前在实际应用最为广泛。此外。Boost库还提出了boost::scoped_ptr、boost::scoped_array、boost::instrusive_ptr等智能指针,虽然尚未得到C++标准采纳,但是在开发实践中可以使用。 shared_ptrshared_ptr对象除了包括一个所拥有对象的指针外,还必须包括一个引用计数代理对象的指针。 时间上的开销主要在初始化和拷贝操作上,*和->操作符重载的开销跟auto_ptr...

c++17(27)-函数指针,函数数组指针【代码】

c1 func2 func3 22 28 Hit any key to continue...#include <iostream> #include <string.h> using namespace std;void func1(){cout<<"func1"<<endl; } void func2(){cout<<"func2"<<endl; } void func3(){cout<<"func3"<<endl; } int func4(int x){cout<<x<<endl;return x+6; }int main(int argc, char **argv) {void (*f1)(){func1};(*f1)();//?????°???é’?void (*f[])(){func2,func3};//?????°??°??????é’?(*f[0])();(*f[1])...