用指针实现内存动态分配
导引:已知:变量在使用前必须被定义且安排好存储空间。且变量有这么一些分类:全局变量、静态局部变量【它们的储存一般是在编译时确定,在程序开始执行前完成。】自动变量【在执行进入变量定义所在的复合语句时为它们分配存储,变量的大小也是静态确定的。临时定义的变量】。这些都是我们在书写的时候就确定的,然后进行编译。
但是!!一般情况下,运行中的很多存储要求在写程序时无法确定。由此我们引入动态存储管理的概念【指的是 不是由编译系统分配的,而是由用户在程序中通过动态分配获取】
正文:动态内存分配能有效地使用内存,让同一段内存可以有不同的用途 ,因为它有这样两个特点:1.使用时申请 2.用完就释放。
动态内存分配的步骤:【c语言来说】1.;了解需要多少空间2.用c的动态存储分配函数来进行空间的分配储存空间3.使用指针指向该内存空间,用指针对内存空间进行修改4.内存完成使命过后,释放内存。
下面介绍几种分配函数:
(第一种函数:申请储存空间)1.malloc():写法如下:void *malloc(unsigned size)这表示malloc在(动态)存储区中开辟的函数大小为size。如果申请成功,那么就会返回一个指向所分配内存空间的起始地址的指针;如果不成功,那么返回NULL(它的值为0).【注意返回值类型:void * 它是通用指针的一个重要用途, 将malloc的返回值转换(自己动手)到特定指针类型,赋给一个指针】。
示例:if( ( p=(int*)malloc(n*sizeof(int) ) ==NULL );printf("not able to allocate memory.");(int*)表示强制转换成int型的指针malloc(n*sizeof(int)就是分配函数sizeof(int)就是算字长,* n代表我需要的空间。调用malloc时,用 sizeof 计算存储块大小
每次动态分配都要检查是否成功,考虑例外情况处理,而且虽然存储块是动态分配的,但它的大小在分配后也是确定的,不要越界使用。
2.calloc:写法:void*calloc(unsinged n,unsigned size),这个函数有两个形参不同于malloc,它可以自动将储存块全部转化为0.
重复一遍:malloc对所分配的存储块不做任何事情 ,calloc对整个区域进行初始化 !!
(第二种函数:释放储存空间)1.free写法:void free(void *ptr).ptr作为指针,它指向要释放空间的首地址。
(第三种函数:分配调整函数)realloc: 写法:void realloc(void *ptr,unsigned size);此函数的作用是重新调整内存空间,ptr必须是以前动态分配得到的指针,unsigned size是重新需要的空间大小。 如果调整失败,那么ptr指向的储存块的内容不变,函数返回值NULL。如果调整成功,那么新的内存空间就是size,且要与原来的储存块一致(假如新的内存大一些,就在原有的基础上再补;如果新的储存块比较小,那么就取原来的储存块的前size部分)。
如果要确保指针学懂了,那么要确认这几点:1.掌握指针作为函数的参数进行熟练编程,通过函数调用改变主调函数变量的值 2.利用指针进行数组相关操作((1) 实参是数组名 (2) 形参是指针变量 可以写成数组形式) 3.能够使用字符串常用处理函数进行编程(包含在头文件string.h里面),并能使用字符指针进行字符串相关操作(利用指针指向系统原有的字符串) 4.通过指针实现动态内存分配。
相关文章:
用指针实现内存动态分配
导引:已知:变量在使用前必须被定义且安排好存储空间。且变量有这么一些分类:全局变量、静态局部变量【它们的储存一般是在编译时确定,在程序开始执行前完成。】自动变量【在执行进入变量定义所在的复合语句时为它们分配存储&#…...
DBSCAN聚类算法及Python实现
DBSCAN聚类算法 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,可以将数据点分成不同的簇,并且能够识别噪声点(不属于任何簇的点)。 DBSCAN聚类算法的基…...
风光及负荷多场景随机生成与缩减
目录 1 主要内容 计算模型 场景生成与聚类方法应用 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序方法复现了《融合多场景分析的交直流混合微电网多时间尺度随机优化调度策略》3.1节基于多场景技术的随机性建模部分,该部分是随机优化调度的重要组成部分…...
lamda表达式
lamda表达式一. lamda表达式的特性二.常用匿名函数式接口2.1 Supplier接口2.2 Consumer接口2.3 Predicate接口2.4 Function接口2.5 BiFunction接口三.stream流传递先后顺序四.表达式4.1 ForEach4.2 Collect4.3 Filter4.4 Map4.5 MapToInt4.6 Distinct4.7 Sorted4.8 groupingBy4…...
MobTech 秒验|极速验证,拉新无忧
一、运营拓展新用户的难题 运营拓展新用户是每个应用都需要面对的问题,但是在实际操作中,往往会遇到一些困难。其中一个主要的难题就是注册和登录的繁琐性。用户在使用一个新的应用时,通常需要填写手机号、获取验证码、输入验证码等步骤&…...
大模型混战,阿里百度华为谁将成就AI时代的“新地基”?
从算力基础到用户生态,群雄逐鹿大模型 自2022年stable diffusion模型的进步推动AIGC的快速发展后,年底,ChatGPT以“破圈者”的姿态,快速“吸粉”亿万,在全球范围内掀起了一股AI浪潮,也促使了众多海外巨头竞…...
干翻Hadoop系列之:Hadoop前瞻之分布式知识
前言 一:海量数据价值 二:海量数据两个棘手问题 1:海量数据如何存储? 掌握分布式存储数据的思想。 A:方案1:单机存储磁盘不够加磁盘 限制问题: 1:一台计算机不能无限制拓充 2&a…...
MAE论文阅读《Masked Autoencoders Are Scalable Vision Learners》
文章目录动机方法写作方面参考Paper: https://arxiv.org/pdf/2111.06377.pdf 动机 首先简要介绍下BERT,NLP领域的BERT是基于Transformer架构,并采取无监督预训练的方式去训练模型。它提出的预训练方法在本质上是一种masked autoencoding,也就…...
代码随想录算法训练营第三十四天-贪心算法3| 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
1005. Maximize Sum Of Array After K Negations 参考视频:贪心算法,这不就是常识?还能叫贪心?LeetCode:1005.K次取反后最大化的数组和_哔哩哔哩_bilibili 贪心🔍 的思路,局部最优ÿ…...
比较系统的学习 pandas (2)
pandas 数据读取与输出方法和常用参数 1、读取 CSV文件 pd.read_csv("pathname",step,encoding"gbk",header"infer",name[],skip_blank_linesTrue,commentNone) path : 文件路径 step : 指定分隔符,默认为 逗号 enco…...
怎么查看电脑主板最大支持多少内存?
很多电脑,内存不够用,但应速度慢;还有一些就是买了很大的内存条,但是还是反应慢;这是为什么呢?我今天明白了,原来每个电脑都有自己的适配内存,就是每个电脑能支持多大的内存…...
数据结构——线段树
线段树的结构 线段树是一棵二叉树,其结点是一条“线段”——[a,b],它的左儿子和右儿子分别是这条线段的左半段和右半段,即[a, (ab)/2 ]和[(ab)/2 ,b]。线段树的叶子结点是长度为1的单位线段[a,a1]。下图就是一棵根为[1,10]的线段树࿱…...
【C++进阶】实现C++线程池
文章目录1. thread_pool.h2. main.cpp1. thread_pool.h #pragma once #include <iostream> #include <vector> #include <queue> #include <thread> #include <mutex> #include <condition_variable> #include <future> #include &…...
Redis常用五种数据类型
一、Redis String字符串 1.简介 String类型在redis中最常见的一种类型 string类型是二制安全的,可以存放字符串、数值、json、图像数据 value存储最大数据量是512M 2. 常用命令 set < key>< value>:添加键值对 nx:当数据库中…...
C++ Primer第五版_第十一章习题答案(1~10)
文章目录练习11.1练习11.2练习11.3练习11.4练习11.5练习11.6练习11.7练习11.8练习11.9练习11.10练习11.1 描述map 和 vector 的不同。 map 是关联容器, vector 是顺序容器。 练习11.2 分别给出最适合使用 list、vector、deque、map以及set的例子。 list:…...
GEE:使用LandTrendr进行森林变化检测详解
作者:_养乐多_ 本文介绍了一段用于地表变化监测的代码,该代码主要使用谷歌地球引擎(GEE)中的 Landsat 时间序列数据,采用了 Kennedy 等人(2010) 发布的 LandTrendr 算法,对植被指数进行分割,通过计算不同时间段内植被指数的变化来检测植被变化。 目录 一、加入矢量边界 …...
docker项目实施
鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器_闭关苦炼内功的技术博客_51CTO博客鲲鹏916架构openEuler-arm64成功安装docker并跑通tomcat容器,本文是基于之前这篇文章鲲鹏920架构arm64版本centos7安装docker下面开始先来看下系统版本卸载旧版本旧版本…...
springboot实现邮箱验证码功能
引言 邮箱验证码是一个常见的功能,常用于邮箱绑定、修改密码等操作上,这里我演示一下如何使用springboot实现验证码的发送功能; 这里用qq邮箱进行演示,其他都差不多; 准备工作 首先要在设置->账户中开启邮箱POP…...
Java 进阶(5) Java IO流
⼀、File类 概念:代表物理盘符中的⼀个⽂件或者⽂件夹。 常见方法: 方法名 描述 createNewFile() 创建⼀个新文件。 mkdir() 创建⼀个新⽬录。 delete() 删除⽂件或空⽬录。 exists() 判断File对象所对象所代表的对象是否存在。 getAbsolute…...
“终于我从字节离职了...“一个年薪40W的测试工程师的自白...
”我递上了我的辞职信,不是因为公司给的不多,也不是因为公司待我不好,但是我觉得,我每天看中我憔悴的面容,每天晚上拖着疲惫的身体躺在床上,我都不知道人生的意义,是赚钱吗?是为了更…...
PCB 设计避坑指南|从基础规范到制造验证,一文吃透所有核心规则
1 设计基础规范1.1 文件命名与管理PCB 命名遵循 “产品型号 功能代码 设计序号 版本” 格式,例如 “AIP25-Lab-V1.0” 。严禁直接覆盖旧版文件,确保设计版本的可追溯性和规范性。1.2 材料与工艺选择1.2.1.基材采用 FR4 环氧玻璃布。 1.2.2 板厚厚度范…...
ARM核心板在POCT设备开发中的选型与应用实战
1. 项目概述:ARM核心板如何重塑POCT设备开发在医疗设备这个对稳定性和可靠性要求近乎苛刻的领域,每一次技术选型都像是一次精密的手术,容不得半点闪失。我接触过不少体外诊断(IVD)设备厂商,尤其是做即时检验…...
ARM SCTLR2_EL2寄存器解析与虚拟化安全控制
1. ARM SCTLR2_EL2寄存器架构解析SCTLR2_EL2是ARMv8/v9架构中EL2(Hypervisor)级别的扩展系统控制寄存器,作为标准SCTLR_EL2的补充,它通过掩码位机制实现了对关键系统功能的细粒度控制。这个64位寄存器主要包含两类功能字段&#x…...
IoTDB与TimechoDB深度解析
全球物联网设备将在2025年突破416亿台,每天产生79.4ZB的数据,相当于8000多万个1TB硬盘才能装下。面对这场数据海啸,传统数据库纷纷“侧漏”,时序数据库成为企业数字化升级的“救生艇”。 本文将从五大核心维度,系统剖…...
去人类中心化研究引擎:AI如何突破学科壁垒驱动科研创新
1. 项目概述:一个“去人类中心化”的研究引擎最近在GitHub上看到一个挺有意思的项目,叫“De-Anthropocentric-Research-Engine”,直译过来就是“去人类中心化研究引擎”。第一眼看到这个标题,你可能和我一样,脑子里会冒…...
飞凌T507核心板开发实战:开机LOGO、电阻屏校准与双屏异显配置详解
1. 项目概述与核心板简介最近在做一个车载信息娱乐终端的项目,硬件平台选用了飞凌嵌入式的FETT507-C核心板。这块板子基于全志T507这颗四核车规级处理器,Cortex-A53架构,主频1.5GHz,集成了G31 GPU,标配2GB DDR3L内存和…...
KMS_VL_ALL_AIO智能激活脚本:5分钟搞定Windows和Office永久激活的终极方案
KMS_VL_ALL_AIO智能激活脚本:5分钟搞定Windows和Office永久激活的终极方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活和Office办公软件授权而烦恼吗&…...
从MC1496乘法器到DSB调制:一个经典电路的设计实践与参数解析
1. DSB调制基础与MC1496乘法器简介 第一次接触DSB调制电路时,我被那个看似简单的波形变换背后精妙的数学原理深深吸引。DSB(Double Sideband)双边带调制,本质上是用低频信号去控制高频载波的幅度,但与传统AM调制不同&a…...
STM32H743以太网实战:基于CubeMX 6.8.0与LAN8720的LWIP移植避坑指南
1. 环境准备与CubeMX基础配置 折腾了一周终于把STM32H743的以太网调通,发现网上大多数教程都存在配置遗漏。这里分享我的完整配置流程,从CubeMX安装到最终Ping通,每个步骤都经过实测验证。 首先确保安装STM32CubeMX 6.8.0和对应的HAL库。我遇…...
零代码也能做游戏?用UE5蓝图系统10分钟做个会转的潜艇(附完整资产包)
零代码游戏开发:用UE5蓝图10分钟打造动态潜艇 当第一次打开虚幻引擎5时,许多初学者会被其庞大的功能体系所震撼——从影视级的光照系统到数百万面的高精度模型渲染,这款引擎几乎能实现任何你能想象到的视觉效果。但更令人惊喜的是,…...
