C语言学习(三十二)---动态内存(一)

news2025/1/6 18:48:44

在昨天的内容中,我们学习有关结构体联合体内存中存储的相关问题,由于粗心,有一个代码重复了,感谢这位朋友的提醒:
在这里插入图片描述
现在已经对内容进行了修改,感谢朋友们的支持。

今天我们将学习有关动态内存的相关问题,一节内容无法阐述,将在后续的几节中进行阐述,好了,话不多说,开整!!!

内存分区

在讲解动态内存之前,首先我们要知道内存的分区是什么样子的,当然了我们并不是指其物理上的分区,而是我们所编写程序时,申请的内存是如何划分的
实际上,内存分为三个区域,分为分栈区堆区静态区,在三个区域中,分别存放着不同的内容,可以用以下一张图进行描述:
在这里插入图片描述
可以看到我们一般的变量,如局部变量、形参,都是存放在栈区的,而今天的主要内容就和堆区有关。

动态内存的必要性

有的时候,我们向内存申请空间时,比如我暂时申请了5个整型也即20个字节的空间,但是我在使用时又想使用10个整型,这时动态内存就派上用场了。

动态内存的用法

在向堆区上进行动态内存申请时,有两种方式,两种方式各有不同,但功能基本一样,下面分别进行介绍。

malloc

首先查看该函数的使用帮助:
在这里插入图片描述
可见,其向堆区申请多少字节的空间,返回一个空指针
如以下代码,我想申请5个整型的数据空间,那么就可以就可以如下定义,因为是整型数据,因此我们可以强制转化为整型指针然后返回,然后对申请的空间进行赋值和打印,代码如下:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int* p = (int*)malloc(5*sizeof(int));
    int i = 0;
    for(i=0;i<5;i++)
    {
        *(p+i) = i;
        printf("%d ",*(p+i));
    }
    return 0;
}

编译查看结果:
在这里插入图片描述
可以内存开辟成功了。

calloc

下面介绍该函数的使用介绍:
在这里插入图片描述
可见,该函数是向堆区中申请n个元素每个元素的所占大小为多少字节,同样返回空指针,同样按上述要求,则代码如下:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int* p = (int*)calloc(5,4);
    int i = 0;
    for(i=0;i<5;i++)
    {
        *(p+i) = i;
        printf("%d ",*(p+i));
    }
    return 0;
}

编译查看结果:
在这里插入图片描述
从上述结果可以看到,内存申请成功。

内存扩展

上述的内容中,我们定义了5个整型,但是现在我想使用10个整型了,那怎么办呢,此时就可以使用realloc函数,查看使用方式如下所示:
在这里插入图片描述
可见其传入一个指针,然后重新申请该指针所指向的堆区的空间,大小为字节
比如以下代码:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int* p = (int*)calloc(5,4);
    int i = 0;
    for(i=0;i<5;i++)
    {
        *(p+i) = i;
        printf("%d ",*(p+i));
    }
    printf("\n");
    int* p2 = (int*)realloc(p,10*sizeof(int));
    for(i=0;i<10;i++)
    {
        *(p2+i) = i;
        printf("%d ",*(p2+i));
    }
    return 0;
}

查看结果:
在这里插入图片描述
可以重新分配空间成功

当然了,实际上,上述时使用过程中,不够严谨,将在后续内容中进行补充

上述内容即使今天的全部内容了,感谢大家的观看。
如果方便,辛苦大家点个赞和关注哦!
您的点赞或评论或关注是对我最大的肯定,谢谢大家!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/717499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android Studio 和 Android Gradle 插件的已知问题

Android Studio 的已知问题 渲染 Compose 预览时出错 从 Android Studio Chipmunk 开始&#xff0c;如果您在问题面板中看到 java.lang.NoSuchFieldError: view_tree_saved_state_registry_owner 或 java.lang.ClassNotFoundException: androidx.savedstate.R$id&#xff0c;…

大势速影:机载激光快速建模测绘装备

实景三维模型高逼真、高真实、高精度的展示地物的几何结构、纹理色彩、空间位置等信息&#xff0c;在当前测绘应急保障、规划等领域具备极大的应用价值。但是&#xff0c;激光雷达和倾斜摄影建模技术均无法较好的满足快速建模应用需求&#xff0c;具体表现在&#xff1a;激光点…

LiDAR SLAM 闭环——BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM

先说总结 现算法已经开源&#xff0c;代码链接&#xff1a; GitHub - YungeCui/BoW3D: [RA-L] BoW3D: Bag of Words for Real-Time Loop Closing in 3D LiDAR SLAM. 背景 SLAM&#xff08;同时定位与地图构建&#xff09;是一种让机器人在构建环境地图的同时&#xff0c;定位…

zk集群启动异常:Error contacting service. It is probably not running.

# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/aspire/product-kafka3.4/zookeeper/bin/../conf/zoo.cfg Error contacting service. It is probably not running. 查看 是否 iptables 限制了 端口访问&#xff0c; 2181端口&#xff0c; 需要把…

浅谈企业信息化能源管理系统的设计与应用

安科瑞 华楠 摘要: 我国的经济社会不断发展&#xff0c;对环境和资源造成的压力也越来越大。为了促进经济和社会的协调发展&#xff0c;可持续发展的理念被提出&#xff0c;企业信息化能源管理系统应运而生。将上述管理系统应用在企业之中&#xff0c;可以节约能源&#xff0…

Linux下输出带背景颜色和字体颜色的文本

最近在用Go语言开发项目&#xff0c;在跟踪Go底层实现时发现控制台输出的文本有样式&#xff0c;发现linux下在控制台输出可以控制文本样式&#xff0c;在此做个整理。 目录 1.发现 2.命令行输出测试 3.Linux下样式文本 1.发现 以下是我的一段Go代码&#xff1a;test_exec…

2023年07月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2023年07月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

那些无法避免的弯路

近日&#xff0c;某高校毕业生在校期间窃取学校内网数据&#xff0c;收集全校学生个人隐私信息的新闻引发了人们对互联网生活中个人信息安全问题的再度关注。在大数据时代&#xff0c;算法分发带来了隐私侵犯&#xff0c;在享受消费生活等便捷权利的同时&#xff0c;似乎又有不…

Pyformer: 内嵌局部机理的时序预测模型

待续 代码粗解 在 data_lorder.py文件中&#xff0c;定义了几个用于处理不同数据集的类&#xff0c;这里只关注Dataset_ETT_hour类。Dataset_ETT_hour类用来加载、处理ETTH数据集&#xff0c;主要包含以下4个方法&#xff1a;__read_data__&#xff0c; def __getitem__(sel…

Mybaits-Plus学习5 代码生成器

引入代码生成器依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version> </dependency> <dependency><groupId>org.freemarker</groupId…

旅游卡app软件开发解决方案

旅游业的不断发展&#xff0c;旅游卡作为一种便捷的旅游方式越来越受到人们的青睐。旅游卡可以帮助游客节省旅游开支&#xff0c;同时也能让游客更好地规划自己的旅游行程。针对这种情况&#xff0c;开发一款旅游卡app软件是非常必要的。本文将介绍旅游卡app软件开发的解决方案…

mysql 视图

视图&#xff0c;是虚拟存在的表&#xff0c;视图中的数据在数据库中实际不存在&#xff0c;视图只保存查询SQL的逻辑&#xff0c;不保存查询结果 建表sql DROP TABLE IF EXISTS w_dict; CREATE TABLE w_dict (id int(0) NOT NULL AUTO_INCREMENT,label varchar(255) CHARACT…

rsync+intofy实时同步部署(上行、下行)

目录 一&#xff1a;rsync 远程同步 二&#xff1a;配置rsync源服务器 1、安装rsync 2、建立/etc/rsyncd.conf 配置文件 3、 为备份账户创建数据文件 4、 保证所有用户对源目录/var/www/html 都有读取权限 5、 启动 rsync 服务程序 6、关闭 rsync 服务 三&#xff1a; 发起…

华为OD机试(B卷)

华为OD机试&#xff08;B卷&#xff09; 有幸接到了华为OD的机试邀请&#xff0c;三道算法题。比较幸运的是&#xff0c;最后一题&#xff0c;也相对来说不算太难&#xff0c;没有抽到动态规划&#xff0c;还是花了大约90分钟&#xff0c;三道题都通过了&#xff0c;最终拿到了…

获得多线程的方法几种、callable接口与runnable接口的区别、callable接口使用

1、获得多线程的方法几种&#xff1f; &#xff08;1&#xff09;传统的是继承thread类和实现runnable接口&#xff0c;java5以后又有实现callable接口和java的线程池获得。 &#xff08;2&#xff09;函数式接口&#xff1a; 这是一个函数式接口&#xff0c;因此可以用作l…

【bug传奇】12个bug个个成经典,最后一个毁了一个帝国

1、世界第一个bug--万“虫”之母 1947年9月9日&#xff0c;葛丽丝霍普&#xff08;Grace Hopper&#xff09;发现了第一个电脑上的bug。当在Mark II计算机上工作时&#xff0c;整个团队都搞不清楚为什么电脑不能正常运作了。经挖掘真相为&#xff1a; 第一代的计算机是由许多庞…

Python:plt画图隐藏刻度

plt.tick_params(axisboth, whichboth, bottomFalse, leftFalse, labelbottomFalse, labelleftFalse)

软件测试流程扫盲:V/W/H模型,测试左移测试右移

一、软件测试模型 &#xff08;一&#xff09;V模型 V模型是瀑布模型的一种改进V模型标明了测试过程中的不同阶段 1.V模型每个测试阶段的测试内容 单元测试&#xff1a;类、函数 集成测试&#xff1a;接口 系统测试&#xff1a;前期测功能有没有满足需求&#xff0c;后期满…

数据可视化分析,近5年电视机全球出货量和中国产量

随着科技的不断进步&#xff0c;电视机已经不再只是用来看电视节目的设备&#xff0c;而是成为了家庭娱乐的中心&#xff0c;提供了令人难以置信的视觉体验。随着4K和8K技术的引入&#xff0c;我们能够欣赏到前所未有的清晰度和细节还原能力。无论是观看电影、体育比赛还是玩游…

哈工大计算机网课程络网络层协议详解之:Internet网络路由协议详解(RIP、OSPF)

文章目录 RIP协议RIP链路失效、恢复问题RIP路由表的处理 OSPF协议分层的OSPF主干路由器 之前我们也介绍了&#xff0c;作为我们现在广泛使用的Internet网络来说&#xff0c;采用的路由策略是层次化路由策略。 即将不同区域、组织的网络划分成一个个自治系统&#xff0c;在自治系…