指针以及内存分配

2023-11-14

1. 指针很灵活,这使得指针很难管理,在定义指针时,将在栈中开辟一块内存存放指针的地址(栈内的内存由系统分配和释放),指针的地址内存只是存放指针的地址,不存放指针指向的数据,值得注意的是,定义指针时指针会随机指向一块内存,如int  *p;p会指向一块不为空的内存,相当危险,例如执行判断if(!p){ printf("p为空");};这里不会输出"p为空";所以在定义时想让指针p为空,则要int  *p = NULL;如果程序大的话,执行的结果出错都不知道在哪里.

 

2. 给指针赋值,我能力有限,只知道有两种,一种是在堆上分配一块内存(动态分配内存),让指针指向这块内存.第二种是指针指向栈上的一块内存(一般是定义一个非指针变量,让指针指向这个变量);这两种方法通过以下代码实现:

 

3. 不知道你是否知道我为什么没有在第二种方法后也加free(p2)?如果加了free(p2)编译器会报内存错误,因为p2指向的是i内存,i的内存是在

栈上,栈上的内存都是由系统管理,如分配和释放,不需要手动管理,这里使用free(p2)是在释放i的内存,这块内存不需要你管,你却使用free()管理当然会报错,

 

4. 动态分配内存,在C语言中是使用malloc()分配和使用free()释放,在C++中,是使用new分配和delete释放,都是在堆上分配,malloc()括号内是内存的大小,是size_t(unsigned int)类型,free()括号内是内存的地址或是指向这块内存的指针,new是C++的重载函数,new+大小,

delete+地址;具体的用法看代码:

 

第二种方式我依次输入的是56,78,23,下图是p2的存储方式

 

 

注:如果有错误的地方希望指出,谢谢!

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指针以及内存分配 的相关文章

随机推荐

  • PHP文件包含

    本地文件包含 打开PHPstudy 打开网站根目录 创建文件 文件内容为 在浏览器上查看所包含文件 远程文件包含 文件include php文件内容 print txt文件内容 远程查看print txt 远程包含shell shell t
  • zookeeper入门到精通03——zookeeper集群搭建

    zookeeper集群搭建 3 1 多虚拟机环境搭建 3 2 zookeeper集群搭建 3 1 多虚拟机环境搭建 我们需要搭建zookeeper集群 而由于zookeeper的的服务器数量需要设置为单数 前文介绍了原因 一个zookeep
  • 2023年第47届(第二届)浙江技能大赛网络安全项目 (世赛省选拔赛)A模块解析

    2023年第47届 第二届 浙江技能大赛网络安全项目 世赛省选拔赛 A模块解析 模块A 企业基础设施安全 1 竞项赛目简介 1 1 介绍 1 2 任务描述 1 3 竞赛说明 2 竞赛项目工作任务 2 2 操作系统安全加固 2 2 1 Win
  • OpenCV3.4.13+OpenCV_contrib 双摄像头实时拼接 环境配置

    如题 基于OpenCV3 4 13 VS2015做了个双摄像头实时拼接的代码 是一个大项目的一个baseline的一部分 下面先说配环境再给代码 环境配置 关于OpenCV VS的环境配置网上已经有很多了 因为这份代码用到了OpenCV C
  • 【微信小程序】实现根据某一属性值分类渲染数组内容

    需求与效果 实现根据某一属性值分类渲染数组 需求是 数组如下 渲染在页面上时 根据p num值进行分组渲染 p num相同的放在同一容器里 容器外包裹边框 array content 内容1 id 1 p num 1 content 内容2
  • RabbitMQ系列(十一)RabbitMQ进阶-Queue队列详解-延时队列

    RabbitMQ进阶 Queue队列详解 延迟队列 文章目录 RabbitMQ进阶 Queue队列详解 延迟队列 1 延迟队列场景 1 1 场景 2 延迟队列实现方式 3 TTL Exchange实现延迟队列 3 1 初始化死信交换机 3
  • 正则匹配html内容中的图片路径

    正则匹配html内容中的图片路径 let imgReg
  • 事不避难,知难不难

    My first article
  • Qt 中引入ffmpeg 动态库

    1 前期准备 在qt引入ffmpeg动态库的时候 需要准备ffmpeg的动态库和头文件 2 打开qt项目 在qt项目的 pro文件中添加以下几行代码 INCLUDEPATH PWD thirtLib ffmpeg4 2 include wi
  • 使用R语言添加抖动数据点

    使用R语言添加抖动数据点 在数据可视化中 抖动 jitter 是一种常用的技术 用于在散点图中添加一定程度的随机扰动 以解决数据重叠的问题 本文将介绍如何使用R语言添加抖动数据点 并提供相应的源代码 首先 我们需要准备一组数据用于绘制散点图
  • HTTP的演变

    这个问题之前一直没有关注过 后来在面试的过程中 面试官总喜欢问http1 0和http1 1之间的区别是啥 改进是啥以及优缺点 在今天进行一个总结 Http1 0和Http1 1的对比 这里讲俩放在一起进行对比学习 相较于Http1 0而言
  • Java调用Python脚本报错cv2.error: OpenCV(4.8.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src

    Java调用python脚本报错cv2 error OpenCV 4 8 0 D a opencv python opencv python opencv modules imgproc src resize cpp 4062 error
  • Android开机动画

    Android开机动画 1 BootLoader开机图片 2 Kernel开机图片 3 系统启动时 BootAnimation 动画 3 1 bootanimation zip位置 3 2 bootanimation启动 3 3 Surfa
  • linux保存git用户名密码

    1 创建git credentials gt vim git credentials https username password github com gitlab或github地址 2 执行git命令 gt git config gl
  • leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)

    基于值域的二分法与基于定义域的题型不同 它的目标是从一 特殊排序序列 中确定 第k个元素值 而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引 同时 针对 特殊排序序列 往往需要嵌套使用双指针法进行操作 进一步增加
  • mysql数据库备份与表备份

    一 Mysql中的数据备份 Mysql中数据备份使用的命令是 mysqldump命令将数据库中的数据备份成一个文本文件 表的结构和表中的数据将存储在生成的文本文件中 mysqldump命令的 工作原理很简单 它先查出需要备份的表的结构 再在
  • 转码日记——Javascript笔记(13)修改css样式、事件冒泡和委派

    使用JS控制css样式 1 修改css样式 语法 元素 style 样式名称 样式值 样式值必须是一个字符串 修改box1的样式 box1 style width 300px 如果css中还有 如background color 这种名称在
  • 程序员修仙之路--优雅快速的统计千万级别uv(留言送书)

    菜菜 咱们网站现在有多少PV和UV了 Y总 咱们没有统计pv和uv的系统 预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的 直接接入一个不行吗 别人的不太放心 毕竟自己写的 自己拥有主动权 给你两天时间 系统性能不要太差呀
  • Head First 设计模式 C#实现

    Head First 设计模式 文章目录 Head First 设计模式 完整源码 设计模式入门 具体设计模式 策略模式 观察者模式 装饰者模式 工厂模式 抽象工厂模式 单例模式 命令模式 适配器模式 外观模式 模版方法模式 迭代器模式 组
  • 指针以及内存分配

    1 指针很灵活 这使得指针很难管理 在定义指针时 将在栈中开辟一块内存存放指针的地址 栈内的内存由系统分配和释放 指针的地址内存只是存放指针的地址 不存放指针指向的数据 值得注意的是 定义指针时指针会随机指向一块内存 如int p p会指向