c语言内存分配与释放 不同类别变量的内存分配和释放的区别

1.不同变量使用内存的区别

  1. 静态存储类别的变量:内存数量在编译时确定,程序开始执行时创建,程序结束时销毁。(static、const)
  2. 自动存储类别的变量:程序进入变量定义所在块时存在,离开块时销毁。新创建的变量按顺序加入内存,然后以相反的顺序销毁,类似栈。
  3. 动态分配内存的变量:内存在调用malloc()或相关函数时存在,调用free()后释放内存。
  4. 程序把静态对象、自动对象、动态分配的对象存储在不同的区域。

2.为什么要动态分配内存

大多数情况程序使用的数组小于100个元素,但有时程序需要100000个元素,如果直接声明一个内含100000个元素的数组,这样做浪费内存。
所以通过动态分配内存,使程序更加灵活

3.free在动态内存分配的作用——防止内存泄漏

double *a =(double*)malloc(n*sizeof(double))

函数结束,作为自动变量的指针a消失,但他指向的n*sizeof(double)字节的内存仍然存在,而且由于指针a已经被销毁,所以无法访问这块内存,这块内存也不能被重复使用。

所以需要用free释放动态分配的内存

4.free和malloc用法

free和malloc原型都在stdlib.h头文件中

malloc()返回类型通常为指向char的指针,从ANSI C标准开始,C使用一个新的类型,指向void的指针。所以通常malloc函数的返回值会被强制转换为匹配的类型。

double *p;
p=(double *)malloc(30*sizeof(double));

指针p被声明为指向一个double类型,可以像使用数组名一样使用它,这里分配的是连续的内存块,指针指向已分配块中的第一个结构。

free()函数的参数是之前malloc()返回的地址,因此参数也应是一个指针。该函数释放之前malloc()分配的内存。

free(p);

5.例子-通讯录排序

习题9-5 通讯录排序 (20 分)
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。

输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。

输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
结尾无空行
输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
结尾无空行

5.1代码

#include<stdio.h>
#include<stdlib.h>
struct people{char name[11];long long birth;char phonenum[20]; 
};int main(){struct people *p,temp;int n,i,j;scanf("%d",&n);p=(struct people *)malloc(n*sizeof(struct people));//分配空间for(i=0;i<n;++i){scanf("%s %lld %s",&p[i].name,&p[i].birth,&p[i].phonenum);}for(i=0;i<n;++i){for(j=i+1;j<n;++j){if(p[i].birth>p[j].birth){//排序temp=p[i];p[i]=p[j];p[j]=temp;}}}for(i=0;i<n;++i){if(i==0)printf("%s %lld %s",p[i].name,p[i].birth,p[i].phonenum);else printf("\n%s %lld %s",p[i].name,p[i].birth,p[i].phonenum);}free(p);//释放
}

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

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

相关文章

学计算机的一开学叫要带电脑吗,大一新生开学需要带电脑吗?辅导员给出建议,学生需提前了解...

高考已经落下帷幕&#xff0c;学生们在等待成绩的这段时间&#xff0c;可以适当的放松一些。其实考试成绩还未出来之前&#xff0c;很多同学心里都有底了。所以也开始考虑自己想要报考的专业与院校&#xff0c;甚至有些学生已经开始准备自己上大学需要带的各种用品。很多学生在…

方阵循环右移

题目 练习7-8 方阵循环右移 (20 分) 本题要求编写程序&#xff0c;将给定nn方阵中的每个元素循环向右移m个位置&#xff0c;即将第0、1、⋯、n−1列变换为第n−m、n−m1、⋯、n−1、0、1、⋯、n−m−1列。 输入格式&#xff1a; 输入第一行给出两个正整数m和n&#xff08;1≤…

奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线

期末作业考核《计算机应用基础》满分 100分一、判断对错(每小题1分&#xff0c;共10分)(√)1&#xff0e;冯.诺依曼提出的计算机体系结构奠定了现代计算机的结构理论基础。()2&#xff0e;DOS操作系统是一个单用户多任务操作系统。(√)3&#xff0e;没有装配软件系统的计算机不…

计算机专业对口升学模拟试题,2010对口升学模拟试题计算机专理论综合

对口升学模拟试题计算机专理论综合专业 计 算 机 学号 姓名 班级________________ 密 封 线2010年隆回九中计算机专业对口升学模拟试题计算机专业综合试题分第Ⅰ卷(选择题)和第Ⅱ卷(非选择题)两部分。满分390分&#xff0c;考试时间150分钟。第Ⅰ卷(选择题 共130分)注意事项&am…

c语言使用指针在被调函数中改变主调函数的变量 地址运算符 间接运算符

1.指针 用于存储变量的地址 指针是一个值为内存地址的变量。 2.&运算符(地址运算符) &后跟一个变量名&#xff0c;给出变量的地址 &a&#xff0c;表示变量a的地址3.*运算符(间接运算符/解引用运算符) *后跟一个指针名或地址&#xff0c;给出存储在指针指向地…

西电计算机学院导师苗启广,Xidian Media Lab

西电媒体实验室首位博士生简萌顺利通过博士学位论文答辩2015年11月27日上午&#xff0c;西电媒体实验室博士学位论文答辩会在北校区科技楼A301B会议室举行&#xff0c;郑喆坤教授指导的首位博士生简萌顺利通过博士学位论文答辩。本次答辩委员会主席由西北工业大学自动化学院副院…

C语言程序设计基础练习题

PTA上C语言程序设计练习题&#xff0c;包含 换硬币、水仙花数、最大公约数最小公倍数、高空坠球、猴子吃桃、兔子繁衍、出租车计价、三角形判断、简单计算器、平面向量加法。 这些题需要一些细节或思维。 1.换硬币&#xff1a; 习题4-5 换硬币 (20 分) 将一笔零钱换成5分、2…

使用zigbee的协议栈进行协调器路由器终端初始化

实验目的&#xff1a; 使用协议栈,外加自己写的数码管的代码模块 配置协调器路由器终端&#xff0c;各自对应数码管数字C,R,E。 本身不是很细致&#xff0c;只是把一些重要步骤截了一下&#xff0c;IAR工程什么的默认大家都会了。 zigbee协议栈的下载 下载完找以下文件夹 找…

工程用计算机是什么样子的,【2人回答】学软件工程的应该买什么样的处理器电脑?-3D溜溜网...

回答&#xff1a;1、荣耀MagicBook Pro 2020&#xff1a;&#xff0c;荣耀MagicBook Pro 2020还搭载了MX350独显&#xff0c;MX350基于同GTX 1050一样的GP107核心&#xff0c;让笔记本具备了一定的游戏能力&#xff0c;学习、办公之余的游戏场景也可以从容应对&#xff0c;编程…

zigbee无线通信数码管实验、usbDongle抓包、发字符串

文章目录无线通信数码管实验无线通信抓包usbDongle无线通信发字符串&#xff1a;无线通信数码管实验 给一个模块下载发送程序&#xff0c;模块数码管变为1&#xff0c;说明该模块已成为发送模块。 给一个模块下载接收程序&#xff0c;模块数码管变为2&#xff0c;说明该模块已…

计算机安全加固自动检查,Windows主机安全加固检查列表.doc

第 PAGE 13 页 共 NUMPAGES 13 页目 录TOC \o "1-3" \h \z \u HYPERLINK \l "_To 1账户管理 PAGEREF _To\h 3HYPERLINK \l "_To 1.1用户管理 PAGEREF _To\h 3HYPERLINK \l "_To 1.2弱口令修改 PAGEREF _To\h 3HYPERLINK \l "_To 1.3密码策略 PAG…

zigbee协议栈的系统相关函数的使用 仿照协议栈写事件

文章目录1.osal_set_event函数的使用2.osal_start_timerEx函数&#xff0c;数码管变成c&#xff0c;两秒钟以后&#xff0c;灯点亮。3.我们能不能自己添加一个事件而不用GENERICAPP_SEND_MSG_EVT事件。主要就是通过这个实验知道了&#xff1a;怎么在初始化时候干一些事情那些函…

老年人自学计算机,老年人怎样学电脑?请问从网上能找到学习资吗?

首先学一些基础的知识&#xff0c;这样入门之后其他的就好说了&#xff01;推荐一些基础性的知识&#xff1a;计算机基础可以分为硬件和软件硬件&#xff1a;主板、CPU、硬盘、内存、显卡、机箱电源、鼠标键盘、光驱、音响等软件&#xff1a;WINDOWS系统、OFFICE等一般基本工具…

zigbee上位机通过vs2019的mfc实现

文章目录一、操作系统和输入输出设备的联系二、应用程序和操作系统的联系三、zigbee上位机具体实现结果&#xff1a;四、实现上位机的具体流程&#xff1a;五、通过windows API实现串口通信的原理&#xff1a;一、操作系统和输入输出设备的联系 操作系统能操纵输出设备执行特定…

网上读书关于软件测试,【读书笔记】之软件测试

1.引论1.1 什么是软件测试软件测试主要是对制作的软件产品进行检查和测试&#xff0c;及时地发现程序中的故障和逻辑错误&#xff0c;以保障软件产品的可靠性。软件测试是保证软件质量的关键步骤&#xff0c;也是提高软件可靠性的重要手段&#xff0c;因此它是软件工程的的重要…

matlab guide 自定义右键菜单

在一个gui图形显示界面上点击右键&#xff0c;出现一些选项可以进行操作。 实验效果&#xff1a; 找到菜单编辑器的上下文菜单&#xff1a; 我们看几个回调函数即可&#xff1a; function clear_Callback(hObject, eventdata, handles) cla; function gridoff_Callback(hObj…

计算机活动感悟怎么写,计算机教学心得体会范文五篇.doc

计算机教学心得体会范文五篇计算机教学心得体会范文五篇【一】一、开卷有益&#xff0c;爱不释手然而&#xff0c;在我参加了第一次培训&#xff0c;我就发现自己错了&#xff0c;此次的电脑培训与以前参加过的培训大相径庭。以前的培训都是应付考试的&#xff0c;实用性不强&a…

Java一些基础知识的整合

文章目录1. 数据类型、变量与常量1.1基本数据类型&#xff08;primitive types&#xff09;1.1.1 boolean1.1.2字符型1.1.2.1 转 义 字 符 含 义1.1.3整数类型1.1.4 浮点类型1.2引用类型( reference types )1.3 基本数据类型和引用类型区别1.4 标识符&#xff08; Identifier&a…

空军部队计算机专业有没有用武之地,报名当兵可以选择陆军、海军、空军、武警、火箭军,艰苦地区部队...

如果是本科生&#xff0c;在部队表现优异&#xff0c;年龄不超26周岁是可以被推荐去参加大学生士兵提干考试。考上之后需要到军校培训6个月左右&#xff0c;毕业后下部队就是中尉军衔。二、报名当兵时有陆军、海军、空军、武警、火箭军&#xff0c;艰苦地区部队&#xff0c;选择…

查看本地计算机ip命令,查看你本机的IP信息的命令ipconfig详解【图】

原标题&#xff1a;"查看你本机的IP信息的命令ipconfig详解【图】"关于路由器的知识分享。 - 素材来源网络 编辑:kaka。对于ipconfig命令大家应该不陌生&#xff0c;它主要用于显示本地计算机网络适配器的ip地址、子网掩码以及默认网关等信息。1、IPconfig不带参数不…