- 0
- 0
- 约1.4千字
- 约 2页
- 2026-01-25 发布于北京
- 举报
2、指针,new和malloc的区别
(1)malloc与free是C++/C语言的库函数,new/delete是C++的运算符。
它们都可用于申请动态内存和释放内存。
(2)对于非数据类型的对象而言,光用maloc/free动态对象的要
求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函
数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够
把执行构造函数和析构函数的任务强加于malloc/free。
(3)因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,
以一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函
数。
(4)C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
(5)new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型
信息的。而malloc返回的都是void指针。
3、数组和链表的区别
数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅
速数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在
内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果
想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快
速数据,很少或不和删除元素,就应该用数组。
链表恰好相反,链表中的元素在内存中不是顺序的,而是通过存在元素中的
指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到
最后一个元素。如果要链表中一个元素,需要从第一个元素开始,一直找到
需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只
要修改元素中的指针就可以了。如果应用需要经常和删除元素你就需要用链
表数据结构了。
C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的
大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组
之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有
些空间可能不被使用,从而造成内存空间的浪费。链表是一种常见的数据组织形
式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时
用delete将已分配的空间释放,不会造成内存空间的浪费。
(1)从逻辑结构角度来看
a、数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当
数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
b、链表动态地进行分配,可以适应数据动态地增减的情况,且可以方便地
、删除数据项。(数组中、删除数据项时,需要移动其它数据项)
(2)从内存角度来看
a、(静态)数组从栈中分配空间,对于程序员方便快速,但自由度小。
b、链表从堆中分配空间,自由度大但申请管理比较.
您可能关注的文档
- 教师职业道德修养基本要求与实践指南.pdf
- 道奇Neon SRT-4喇叭系统维修手册.pdf
- Unity链接MySQL数据库教程.pdf
- 功能列表与说明:频道管理、模型定制、权限分配及优化.pdf
- 创维智能电视系列系统升级图文教程.pdf
- 杜甫诗歌风格“沉郁顿挫”.pdf
- 腾讯暑期实习面试验:从网申到总监面全过程.pdf
- XS142J系列设备保养与维修手册:故障排除指南.pdf
- 数学五级下册统计单元:众数教学要求与实践.pdf
- 操作技能与心智技能形成阶段及训练要求综述.pdf
- 七年级语文上册期末模拟试卷1(解析版).docx
- 七年级语文上册期末模拟试卷1(原卷版).docx
- 七年级语文上册期末模拟试卷2(原卷版).docx
- 七年级语文上册期末模拟试卷2(解析版).docx
- 期末测试卷(二)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(二)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(三)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(原卷版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
- 期末测试卷(一)(解析版)2024—2025学年七年级语文上册期末测试卷(全国版).docx
原创力文档

文档评论(0)