C++面试题精解:指针、new malloc区别及数组链表对比.pdfVIP

  • 0
  • 0
  • 约1.4千字
  • 约 2页
  • 2026-01-25 发布于北京
  • 举报

C++面试题精解:指针、new malloc区别及数组链表对比.pdf

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、链表从堆中分配空间,自由度大但申请管理比较.

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档