指针与存储

C语言存储模式区别、near指针,far指针,huge指针 一、C语言各种存储模式的区别 DOS用一种段地址结构来编址计算机的内存,每一个物理内存位置都有一个可通过段地址一偏移量的方式来访问的相关地址。为了支持这种段地址结构,大多数C编译程序都允许你用以下6种存储模式来创建程序: -----------------------------------------------------------------------—————————————— 阅读详情

更新中

智能指针

传统指针的问题

内存泄漏,分配的内存没有及时释放,导致在释放这段内存之前就失去了对内存的控制

想法

在栈中删除指针时,指针的内存也被释放

常规指针->有析构函数的对象

智能指针模板

  • auto_ptr(C++11摒弃)
  • unique_ptr
  • shared_ptr

在删除智能指针的同时,析构函数释放内存

头文件 memory

auto_ptr<double> pd(new double)

所有权问题

一个智能指针直接赋值给另外一个

如果是常规指针将指向同一个对象,但智能指针会导致程序试图删除同一个对象两次,这是不能允许的。

  • auto_ptr

    auto_ptr的赋值导致所有权转让,放弃对象所有权的指针是一个空指针

  • shared_ptr

    程序可以正常运行,创建对象的引用计数,当成员被释放的时候,调用析构函数时,将引用计数降低到0,并释放以前分配的内存

  • unique_ptr

    和auto_ptr一样,但是编译会报错

    unique_ptr进行赋值时,如果源unique_ptr是一个临时右值,编译器允许这样做,如果会存在一段时间,编译器禁止这样做。

    可以使用std::move()函数将unique_ptr赋给另一个

std::make_unique

Constructs an object of type T and wraps it in a std::unique_ptr.

Constructs a non-array type T. The arguments args are passed to the constructor of T. This overload only participates in overload resolution if T is not an array type. The function is equivalent to:

unique_ptr<T>(new T(std::forward<Args>(args)...))

std::unique_ptr<T,Deleter>::get

Returns a pointer to the managed object or nullptr if no object is owned.

指针的ownership

What is ownership of resources or pointers?

I don’t think there is a universally accepted, 100% accurate and always-applicable definition, but the most useful definition of ownership I’ve encountered in the context of C++ (and programming in general) is responsibility for cleanup. That is, an owner of a resource is the one who’s responsible for correct cleanup of that resource.

What “resource” and “cleanup” mean depends on context. When the resource is memory dynamically allocated via new, cleanup is calling delete. When the resource is a file descriptor, cleanup is closing it. And so on.

That’s why Plain Old Data cannot express ownership: a POD class must have a no-op destructor, and thus cannot perform any automatic cleanup.

Compare int *, std::unique_ptr<int>, and std::shared_ptr<int>. All these types are "a pointer to an int". But the first one does not represent ownership — you can do anything you want with it, and you can happily use it in ways which lead to memory leaks or double-frees.

std::unique_ptr<int> represents the simplest form of ownership: it says “I am the sole owner of the resource (= the dynamically allocated int). When I get destroyed, I clean it up correctly.” It is designed not to offer a sane way of violating the ownership semantics (e.g. it’s noncopyable).

std::shared_ptr<int> represents a more complex form of ownership: “I am one of a group of friends who are collectively responsible for the resource. The last of us to get destroyed will clean it up.” Again, there are a few hoops to jump through before you can violate the semantics.

C语言之指针的基础与存储空间的分配-诺禾 1.指针基础 泛型指针与类型转换泛型指针和类型转换是用来跨越和覆盖C语言的类型系统的途径。泛型指针指向某一数据而不需要理会数据的具体类型。类型转换允许临时地改变数据的类型。函数指针指针指向可执行代码段或指向调用可执行代码段的信息块,而不是指向某种具体数据。它们把函数当做一小段数据来存储和管理。 C语言之指针的基础与存储空间的分配 Figure 2.1. An illustration of some operations with pointers 对于其他类型的任何变量,除非我们显式地指定过,否则我们都不 阅读详情

相关推荐

别光看教程了!手把手带你用STM32F103C8T6最小系统板点亮第一个LED(附完整电路图)

本文详细介绍了如何使用STM32F103C8T6最小系统板点亮第一个LED,从硬件连接到软件开发环境搭建,再到编写和下载程序,手把手教你完成STM32入门的第一步。适合初学者快速上手STM32开发,附完整电路图和代码示例。

weixin_28678831的博客 193

指针存储、指针变量运算及野指针二级指针知识详解

指针存储、指针变量类型、野指针、二级指针、指针数组

weixin_46465199的博客 632

内网环境下的高德地图离线化实战:从瓦片下载到交互功能集成

本文详细介绍了在内网环境中部署离线高德地图的完整实战方案。针对军工、能源、金融等对网络隔离与数据安全有严格要求的场景,文章核心解决了离线地图的两大基石:地图瓦片数据的高效下载与本地化,以及高德地图JS API的获取与插件集成。通过具体代码示例,进一步讲解了如何实现地图初始化、海量点标注与聚合、自定义图标及框选查询等核心交互功能,并分享了内网部署的路径配置、性能优化及法律合规等关键注意事项,为开发者在封闭网络环境下构建稳定、可控的地图应用提供了清晰指南。

Apple的专栏 394

关于指针,存储方式

在内存中,每8位在内存中作为一个储存单元,每8位(bit)也叫一字节(byte),作为内存单位 在32位系统中,每一个存储单元用4字节(也就是32位二进制数)给自己编号,也就是说,一个地址用32位二进制数来表示。编址范围是2^32,也就是4G。 在64位系统中,每一个存储单元用8字节(也就是64位二进制数)给自己编号,也就是说,一个地址用64位二进制数来表示。编址范围是2^64,也就是16777216T,但实际上只能存128G。 注意: 1、指针存储的是地址是用4个存储单元(一个整型变.....

qq_41413485的博客 2785

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 364

ShowDoc item_id 未授权SQL注入漏洞复现

2024年6月,ShowDoc官方发布新版本修复了一个SQL注入漏洞。鉴于该漏洞无前置条件,易于利用,且默认情况下可暴破用户token获取系统后台权限,建议所有使用该系统的企业尽快升级修复,以确保系统安全。

0xSec 2357

如何保存指针地址 理解指针的指针

有这样一个问题就是如何使用一个整数保存一个结构体或类以及其他类型的指针,这种需求在不同语言之间调用是存在的,例如有一个结构体A: struct A { char item1; int item2 }; 需要使用一个整数b,需要用b保存这个结构体指针的地址(struct A* a = new A),使得b的值就是a的指向的地址,你可能会想直接b = a就可以了,但是编译器都不会答应。因为类型不同,一个是整数一个是指向struct A的指针。

开发之路 6618

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

MoorePlus的博客 4218

标准C语言8 9

C语言学习 8 9 指针

zheng131511的博客 554

Autosar诊断实战系列23-NRC优先级解析

NRC分类,优先级判断逻辑及测试注意事项介绍。

initiallizer的博客 2617

8年ES运维经验整理出的Elasticsearch运维手册(超实用)

k1 : 控制非线性词频率归一化(饱和),Elasticsearch中默认值为1.2。用人能看懂的话说就是词语在文档中出现的次数对于得分的重要性。例如说我觉得在某些场景,一个搜索词在文档中出现越多则越接近我希望搜索的内容,就可以将这个参数调大一点。b :控制文档长度对于分数的惩罚力度。变量b处于分母上,它乘以刚刚讨论过的字段长度的比值,Elasticsearch中的b 默认值为0.75。如果b较大,则文档长度相对于平均长度的影响更大。

yonggeit的博客 5273

C——指针学习知识总结(上)

前言 在C语言中,被频繁使用的指针是它的一大特点,可以说想学到C的精髓就逃不掉指针这一关。而对于很多初学而言指针并不像条件判断、循环控制语句一样友好,想要学好指针、能在代码中使用指针,笔者认为就要先了解变量在内存中的存储的形式等先修知识,这样更有利于指针的学习。以下是笔者根据《C Primer Plus》整理的学习笔记,希望能对大家学习指针有所帮助。由于水平有限,如在文中出现错误,感谢大家及时指正。

blackbeardiana的博客 1468

1、网站可靠性工程(SRE):原理、实践与转型指南

本文深入探讨了网站可靠性工程(SRE)的核心原理、实践方法以及组织转型策略。从SRE的基本概念如服务水平指标(SLI)、服务水平目标(SLO)和错误预算入手,详细解析了如何通过SRE实现产品开发、运营和管理团队的高效协作。此外,还涵盖了SRE的实施步骤,包括现状评估、组织认同、基础设施建设、事件响应、错误预算政策制定以及组织结构设计等内容。最后,文章展望了SRE的未来发展,强调了服务目录、合规监管及SRE文化建设的重要性,为企业的现代化运营体系转型提供了全面指南。

xk7n92h3p5m的博客 145

c语言指针变量的值存储的是什么,指针变量的存储实质,C语言指针变量的存储详解...

相信大家都知道这样一个学习指针的观点:要想彻底理解 C 语言中的指针,首先一定要理解 C 语言中变量的存储实质。谈到变量的存储,我们就不得不先说说计算机的内存概念。计算机的内存是一个用于存储数据的空间,由一系列连续的存储单元组成,它就好像电影院中的座位一样,如图 1 所示。图 1 内存中某一区域的编号在电影院中,为了保证大家能够快速找到自己的座位,每个座位都用一个唯一的编号来标识。而对计算机内存来...

weixin_39905725的博客 5675

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机存储与指针

内存当中分为许多个数据单元,每一个数据单元就类似于一个房间,里面存放的是信息,我们的中央处理器要想访问读写数据,首先要知道这个数据的位置在哪里,这个位置就是编址,可以理解为房间的门牌号,这样就可以快速精准地找到数据的位置了。引入下面这张图帮助理解。

2402_89177355的博客 878

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

存储类别与指针

变量的存储类别: (变量值存储时间)动态存储方式,在程序运行期间进行分动态的分配存储空间的方式,静态存储方式是指在程序运行期间分配固定的存储空间的方式;存储空间分为程序区、静态存储区和动态存储区;全局变量全部放在静态存储区中,程序开始时分配空间,完毕时释放;动态存储区中存放以下数据: 1、函数形式参数; 2、自动变量; 3、函数调用时的现场保护和返回地址; 在C语言中每个变量和函数都有两个属性,是数据类型和数据存储类型,存储类别是数据在内存中存储的方式。 存储方式分为静态和动态存储类,具体包含有

ass_am3的博客 249

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

存储器和指针

存储器和指针前言介绍指针什么是指针为什么使用指针介绍存储器全局变量和局部变量按值传递参数按指针传递参数要点 前言 如果真的想玩转C语言, 就需要理解C语言如何操纵存储器。 C语言在如何使用存储器方面赋予了你更多的掌控权。在本章中,你将揭开存储器神秘的面纱,看到读写变量时到底发生了什么;学习数组的工作原理,以及怎样避免烦人的存储器错误;最重要的是,你将看到掌握指针和存储器寻址对成为一名地道的C程序员来讲有多么重要。 介绍指针 什么是指针 指针就是存储器中某条数据的地址。 为什么使用指针 在函数调用时,可

five-five 803

C++ vector容器存储对象和存储指针的区别(vector对象、vector指针)(存储指针时推荐使用智能指针)

通过以上对比,可以根据具体需求选择存储对象或指针。在现代 C++ 中,优先推荐使用智能指针来避免手动内存管理的风险。)时,存在显著差异,主要体现在。、自定义类实例)和指针(如。

Dontla的博客 1152

c语言指针变量作用域,指针变量的存储实质,C语言指针变量的存储详解

相信大家都知道这样一个学习指针的观点:要想彻底理解 C 语言中的指针,首先一定要理解 C 语言中变量的存储实质。谈到变量的存储,我们就不得不先说说计算机的内存概念。计算机的内存是一个用于存储数据的空间,由一系列连续的存储单元组成,它就好像电影院中的座位一样,如图 1 所示。图 1 内存中某一区域的编号在电影院中,为了保证大家能够快速找到自己的座位,每个座位都用一个唯一的编号来标识。而对计算机内存来...

weixin_42513269的博客 970

C51中的指针与存储器特殊指针的差异

C51的指针存储,普通指针与存储器特殊指针的差异

ALittleShip 972

指向指针数组的指针与存储字符串的指针数组

今天看到一道题目,突然把自己对指针的理解整混乱了。 题目是这样的:假设定义了一个指针数组tBooks如下,请定义一个指向它的数组指针p,让程序可以顺利执行,并按要求打印出数据。 关键代码: char *tBooks[] = { "《数据结构》", "《计算机组成原理》", "《C语言程序设计》", "《计算机网络》"...

靡不有初,鲜克有终。 1411

数据存储与指针

这里有一个int *p=NULL,定义一个指针然后将其指向空,和其它类型的数据初始化一样,其它数据初始化可以忽略,但是指针的初始化必须进行,如果大家是初学者,你无意中定义的指针未初始化就可能指向任何地方,虽然我们用的编程软件大多数是有保护的但是遇到没有保护的就会发生严重错误。如果有了上面的搜索函数,在主函数内调用它,此时将主函数的实参放到调用函数的形参位置就可以使主函数的实参具有搜索函数的x,y的值了。如果int类型的数组第一个元素的地址为10001,那么后面的元素地址就是一次加4,一次累加。

D4961的博客 767

指针,数据存储与调试《一探内存究竟》

有关内存 文章目录有关内存前言一、指针初阶1.指针大小2.指针类型解引用 *3.野指针1.成因1.未初始化2.越界3.指针指向的空间释放规避局部地址检查有效性4.指针运算1.+-整数2.指针-指针关系运算时:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。5.二级指针6.指针数组有关栈帧二、数据存储1.数据类型构造类型指针类型2.整形在内存中的存储原码,反码,补码对于整数对于负数2.大小端3.浮点数在内存中的存储EE

qq_62852431的博客 1372

数据在内存中的存储和指针进阶

文章目录前言一、结构体成员变量的调用二、数据在内存中的存储1.整数在内存中的存储2.字节序3.原码、反码、补码4.浮点数在内存中的存储三、指针的进阶1.字符指针2.指针数组和数组指针 前言 11月10日为止,基本学完了C语言的基础知识,并且开始学习数据在内存中的存储和指针进阶的知识。在此总结一下当日所学。 一、结构体成员变量的调用 如何调用结构体中的成员变量呢?有以下两种方法: 1、如果是结构体变量,则使用. 2、如果是结构体指针,则使用-> 另外,结构体作为函数的参数时,一般建议通过传指针的方

th15t13的博客 762

存储指针的数组

#include <stdio.h> #include <stdlib.h> int main(void){ int age[3][4] = { {19, 2, 3, 4,}, {5, 6, 7, 8,}, {9, 10, 11, 112} }; //定义一个有两个元素的指针数组,每个元素都是一个指针变量 int *neme[2]; //设置一个数组指针 存储最大的两个值 if(age[0][0] >= age[0][1]){ .

零界 3096

指针和动态存储分配

指针和动态存储分配 动态存储分配 程序在运行时需要申请存储空间,用来存放信息,但在编程阶段,我们并不知道程序运行的时候需要多大的空间,也不想事先预留一块非常大的区域,因为其中很多空间也许根本不会用得到。针对这个问题,C语言提供了一套机制可以在程序运行时分配存储空间...

ainongpeng5796的博客 286
上一篇: POJ 1001思路及代码
下一篇: C++ 类&对象
鹅鹅鹅www
博客等级 码龄9年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值