关于指针 关于内存

指针内存理解 本文为笔记:来之朱有鹏互联网大讲堂。 关于内存,这个是个有意思的话题,一直以来似懂非懂,今天将成几个维度来理解这个问题。 首先这篇博客内容非常多,你需要一些时间来读它。 废话不说,正文开始。。。。 1、操作系统如何管理内存 先从操作系统角度讲:操作系统掌握所有的硬件内存,因为内存很大,所以操作系统把内存分成1个1个的页面(其实就是一块,一般是4KB),然后以页面为单位... 阅读详情

对于一个32位机器而言,其寻址空间是32位,比如0x0042f3f4,地址是8位16进制数,对于其中任何一位上的一个十六进制数来说需要4个bit来存储,这样就就是4*8=32bit。

在32位机器中VS中存储一个int数据需要4个字节,所以对于一个指向int类型数据的指针来说,指针+1,即指针向后移动一位,对应的指针地址是+4;而对于一个指向char类型的指针来说,指针向后移动一位,对应的指针地址是+1.因为在32位机器中,VS中的char占的空间是1个字节。


const <type> *p  等价于 <type> const *p;


const char *p,意思是const的是*p,即存储的内容不变,*p不能作为左值被改变;

举例:

const char  *p = “123456”;
char e ='a';
 p = &e;//正确,p可以被改变



char * const p,意思是const的是p,即地址不能变,p不能作为左值被赋值。

举例:

char  *const p = “123456”;
char e ='a';
 p = &e;//错误,p可以被改变



如果要改变*p的值,请仔细学习如下:


在学习指针的过程中遇到一个简单的问题:

char  *str = "resource";

str[6] = 'k';   //本想更改指针的内容,这句报内存写入错误

*(str+6) = 'k';  //这样写同样报错


但是这样就没有问题:

char *str = new char[12];

strcpy(str,"resource");

str[6] = 'k';//没问题

*(str+6) = 'k'; //没问题


这样也没问题:

char str[]="resource";

str[6] = 'k';

*(str+6) = ‘k’;

从网上搜寻资料后,找到了一个比较准确的解答:

“resource”是字符串常量。

对于cahr *str ="resource";

把“resource”的值-也就是字符串常量字面值,也就是“resource”的地址,准确来说是起始地址---赋值给字符指针str,Linux下,“resource”字符串是存放于只读数据段区的。char *str = "resource",就是把“resource”的首地址赋给str,所以str存放的是一个只读数据区的地址,对只读区的数据进行禁止写操作,具体由相应的操作系统进行判断以及处理。

而对于char str[] = "resource";

str[]是一个字符数组,编译器首先在栈中分配一定的连续空间用于存放“resource”中的字符以及结尾符,然后把字符串常量的内容,也就是“resource”中的各个字符和结尾符复制到这个栈中的连续空间中.str是数组名,用来表示这个连续栈空间的起始地址,所以str中存放的是栈地址,这个地址的数据是可写的。





内存、指针定义,地址、指针数组、数组指针 内存、指针定义,地址 阅读详情

相关推荐

关于C++的指针和内存

它们提供了更灵活和精确的内存控制能力,但也要求程序员有责任正确地分配和释放内存,以避免内存泄漏和悬挂指针等问题。通过指针,程序员可以动态地分配和释放内存,以及在程序中引用和修改内存中的数据。虽然C++提供了灵活的内存操作方式,但同时也要求程序员对内存进行精确的管理,这可能导致一些挑战和潜在的问题。通过合理的管理和规范的编码实践,可以最大程度地减少C++内存管理带来的问题,确保程序内存的安全和稳定性。当涉及到动态内存分配的类时,浅拷贝可能导致多个对象共享相同的内存块,造成重复释放或访问已经释放的内存。

百锦再的博客 1万+

指针与内存

内存:windows下双击某个可执行程序,发生了: 1.程序要进行的操作对应的代码被装载到代码区; 2.全局和静态数据等待装载到数据区; 3.开辟堆栈,供临时变量使用 内存中数据可以是操作,也可以是数据 变量是对程序中数据存储空间的抽象void main(){ int a[5]={1,2,3,4,5}; printf("%x,%x",a,&a); //32位系统下

LC900730的博客 527

易语言实现数据类型指针操作的高级技巧

本文还有配套的精品资源,点击获取 简介:易语言简化了中文编程,使得编程更加普及。本压缩包提供的源码演示了如何在易语言中不依赖外部文件直接获取数据类型指针。文章详细介绍了相关内存管理、数据结构操作、指针运算、函数过程调用、类型定义、错误处理与调试以及程序优化等关键知识点。通过学习本课程,开发者可以掌握易语言中高效、安全的数据处理方法。 1. 易语言简介与数据类型指针...

weixin_42355400的博客 1545

Golang与Java各方面使用对比(上)

本文只对比Golang与Java的基本情况、基本使用、结构体函数及指针三块内容,下一篇文章会对比面向对象、异常处理、并发编程及垃圾回收的差异。

BoringError的博客 1万+

易语言-内存指针模块易语言

内存指针模块易语言源码例程程序置入汇编代码实现内存指针操作。 点评:内存指针模块易语言源码是易语言汇编应用例程。 三叶自学网

通过指针读写内存.e

易语言通过指针读写内存 .版本 2 .子程序 _按钮_复制内存_被单击 .局部变量 地址, 整数型 .局部变量 缓冲区, 文本型 地址 = 写内存 () 缓冲区 = 取空白文本 (API_取文本长度 (地址) + 1) API_复制内存 (缓冲区, 地址, API_取文本长度 (地址) + 1) 信息框 (缓冲区, 0, ) API_释放内存 (内存指针) .子程序 写内存, 整数型 内存指针 = API_申请内存 (64, 9) ' 申请9个字节的内存空间,并初始化为0 写到内存 ({ 193, 232, 179, 191, 185, 194, 208, 199 }, 内存指针, 8) 返回 (内存指针) .子程序 API写内存, 整数型 内存指针 = API_申请内存 (64, 9) ' 申请9个字节的内存空间,并初始化为0 API_写内存 (API_取当前进程句柄 (), 内存指针, { 193, 232, 179, 191, 185, 194, 208, 199 }, 8, 0) 返回 (内存指针) .子程序 _按钮_直接读内存_被单击 .局部变量 地址, 整数型 .局部变量 缓冲区, 文本型 地址 = API写内存 () 缓冲区 = 取空白文本 (API_取文本长度 (地址) + 1) API_读内存 (API_取当前进程句柄 (), 地址, 缓冲区, 9, 0) API_释放内存 (内存指针) 信息框 (缓冲区, 0, ) .子程序 _按钮_指针到文本_被单击 .局部变量 地址, 整数型 地址 = 写内存 () 信息框 (指针到文本 (地址), 0, ) API_释放内存 (内存指针)

内存泄露&内存越界&悬空指针&野指针

1 编写安全的代码:在使用数组时,确保索引在有效范围内进行访问。使用安全的库函数和数据结构,如或std::array,它们自动处理边界检查。对指针进行空指针检查,确保指针指向的内存区域有效。避免不安全的类型转换。2 进行边界检查:确保在对数组、指针或缓冲区进行访问和操作之前,进行有效的边界检查。使用循环或条件语句来限制索引或指针的范围,防止越界访问。在进行字符串操作时,使用安全的函数(如strncpy或snprintf)来确保不会溢出目标缓冲区。

qq_52075923的博客 4280

内存指针模块易语言源码-易语言

内存指针模块易语言源码

指针和内存的关系

1、如何描述内存: (1)一段内存需要有一个地址和内存的大小才可以描述; (2)一个内存可以说是一个buffer,那么这个buffer就是一个指针,然后还需要一个buffer_size; (3)也可以用头指针和尾指针来描述,其实尾指针减去头也就是size; 2、具体代码 (1)要注意一个函数如何实现传内存的指针进去,如何修改这个指针的所指向的内容; (2)使用memcpy函数,将内...

weixin_40405692的博客 1281

内存指针读写例子-易语言

使用指针读写内部内存例子,十分简单易懂 可以把程序编译成DLL注入到其他程序中读写其他程序内存 读写不会被监视读写的软件发现比如XX无间道

易语言内存指针模块

易语言内存指针模块源码,内存指针模块,指针_取子程序地址,取当前参数个数,指针_取通用类型,指针_强制转换,指针_取变量指针,指针_取,指针_取变量数据地址,指针_到整数,指针_是否有效,数组_通用加入成员,数组_取数组成员数,数据类型值取名,指针_到子程序,指针_

c语言指针占多少内存空间,C语言指针及占据内存空间

第一、了解内存空间本文章文字有点多,会有点枯燥,配合图文一起看可以缓解枯燥,耐心阅读哦!!!先了解内存地址,才更好的理解指针!我们可以把内存想象为成一列很长很长的 货运火车 ,有很多大小相同的车厢,而每个车厢正好相当于在内存中表示 一个字节 。这些车厢装着不同的货物,就像我们的内存要存着各式各样的数据。 多啰嗦一下我们平时在电脑上能够听音乐、看视频和文章,其实看到的这些东西就是内存中每个“车厢”...

weixin_34710938的博客 3730

从模型车到真实路口:基于YOLOv5-Lite与SORT的轻量化车流量检测系统实战

本文详细阐述了如何将基于YOLOv5-Lite与SORT的轻量化车流量检测系统从毕业设计原型部署到真实路口。文章聚焦于解决在嵌入式平台(如树莓派)上实现实时、稳定检测的工程挑战,涵盖数据采集、模型微调、系统集成及动态信号灯策略,为智能交通灯系统提供了实用的轻量化解决方案。

weixin_29179311的博客 125

野指针、空指针、空悬指针与内存管理

在C语言中,悬空指针指的是指向已删除(或释放)的内存位置的指针。若一个指针指向的内存已经被释放,但指针的指向未重新指向有效的内存地址,那么这个指针就是空悬指针。(NULL是空常量,它的值是0,一般存放在内存0x00000000的位置,这个地址只能存NULL,不能被其他程序修改)很多情况下,我们不可避免会遇到野指针,如刚定义的指针无法立即为其分配一块恰当的内存,又或者指针的指向的内存已经被释放等等。定义:指向一块未知区域(已经销毁或访问内存受限的内存区域外的已存在或不存在的内存区域),的指针,被称作野指针。

weixin_64487558的博客 1961

PL/SQL 中的数据导入和导出:CSV 文件格式详解

在 PL/SQL 开发中,数据的导入和导出是常见的操作。本文将深入探讨如何使用 PL/SQL 导入和导出 CSV 文件格式的数据,帮助你轻松地实现数据迁移、备份和数据交换等需求。CSV(Comma-Separated Values)是一种常见的文本文件格式,它以逗号作为字段的分隔符,每行表示一个记录。使用 CSV 格式可以方便地在不同的系统之间共享和传输数据。下面我们将分步介绍如何在 PL/SQL 中导入和导出 CSV 文件格式的数据。

pleaseprintf的博客 8835

DataWorks PyODPS第三方包全攻略:从打包到加载的完整流程

本文详细介绍了在DataWorks的PyODPS节点中使用第三方Python包的完整流程,包括环境限制、打包工具pyodps-pack的使用、资源上传与加载实战,以及特殊场景处理技巧。通过本文,开发者可以掌握在MaxCompute受限环境中灵活使用自定义依赖的方法,提升数据处理效率。

dd012的博客 988

通过函数为指针分配内存空间

当你想把指针作为形参传给一个函数,并通过在函数内给形参分配内存空间来为指针分配内存空间时,实际的指针并没有被分配内存.

RobotFreak的博客 5325

Anylogic试用版密匙

#$%99dTMbLIj+hm/c9fn0suWlfQjdK9FzRH8oSbR Rbm3FEeONkF5mDLKHxhscEDBANDg4BSU2Oi6hErk TH/KzwiCtsM0jfD50uRsj60+gi9ifTlduwcpSr6a GtVSilXwF997xTVAoMLddqOzGQAbnSjBiJOBdm1Z 0QwwIEJynvYgckLfoEADzncIgNnJjYshWcmGh3s9 gTgyuQPlRBeTXfb+ZJPI1JGi4sAUljwdB53Df+AX SEf5FaIbih

qq_43939616的博客 8264

C指针之一:指针和内存

参考书籍《深入理解c指针》 原书作者:Richard Reese 华盛顿州塔尔顿州立大学副教授 如果想在C/C++道路上走的更远,那么必须非常熟悉指针 1、关于指针大小的谣言,指针到底多大? 指针占据内存大小, 64位平台下是8 32位平台下是4 一、指针和内存 1、为什么要精通指针 支持动态分配、快速,高效 2、声明指针 int *pi; 3、如何阅读声明 倒过来读,例如指向常量的指针 cons...

开发笔记 1473

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2666

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2067

指针的原理——地址、内存

这里写目录标题指针指针是什么指针与指针类型指针+-整数指针的解引用指针运算指针+-整数指针-指针指针和数组 指针 指针是什么 百度百科: 指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 指针是一个占据存储空间的实体在这一段空间起始位置的相对距离值。在C

weixin_45861152的博客 5418

基于AI的智能开发环境—Trae在Web开发中的应用实战与性能评估【Trae项目实战】

Trae 是一款与 AI 深度集成的开发工具,提供智能问答、代码自动补全和基于 Agent 的 AI 自动编程能力,极大提升开发效率。它具备完备的 IDE 功能,如代码编写、项目管理和源代码管理等,同时还具备强大的 AI 助手,能够提供智能问答、实时代码建议、代码片段生成等服务。开发者可以通过自然语言与 AI 协作,从 0 到 1 开发项目,AI 会根据需求自动生成代码或创建文件。

一键难忘的博客 3万+

C语言指针:内存和指针

内存单元的编号=地址=指针

m0_62183318的博客 1439

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。

猿小白的博客 1163

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C++ 指针及内存模型

指针是 C++ 中强大的工具,提供了直接内存访问的能力。正确使用指针和内存管理机制(如newdelete、智能指针)是确保程序安全和高效的关键。理解指针的基本概念、内存管理、函数指针和智能指针是编写健壮 C++ 代码的基础。

qq_50373827的博客 774

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 数组作为函数参数的传递方法
下一篇: 启动安全桌面后VS助手禁用如何重新启用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值