C/C++教程

C++使用new来创建动态数组

本文主要是介绍C++使用new来创建动态数组,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  如果程序只需要一个值,则可能会声明一个简单变量,因为对于管理一个小型数据对象来说,这样做比使用new和指针更简单,尽管给人留下的印象不那么深刻。通常,对于大型数据(如数组、字符串和结构),应使用new,这正是new的用武之地。例如,假设要编写一个程序,它是否需要数组取决于运行时用户提供的信息。如果通过声明来创建数组,则在程序被编译时将为它分配内存空间。不管程序最终是否使用数组,数组都在那里,它占用了内存。在编译时给数组分配内存被称为静态联编(static binding),意味着数组是在编译时加入到程序中的。但使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编(dynamic binding),意味着数组是在程序运行时创建的。这种数组叫做动态数组(dynamic array)。使用静态联编时,必须在编写程序时指定数组的长度;使用动态联编时,程序将在运行时确定数组的长度。

  下面来看一下关于动态数组的两个基本问题:如何使用C++的new运算符创建数组以及如何使用指针访问元素。

  1、使用new创建动态数组

  在C++中,创建动态数组很容易;只要将数组的元素类型和元素数目告诉new即可。必须在类型名后加上方括号,其中包含元素数目。例如,要创建一个包含10个int元素的数组,可以这样做:

  int * psome = new int [10];

  new运算符返回第一个元素的地址。在这个例子中,该地址被赋给指针psome。

  当程序使用完new分配的内存块时,应使用delete释放它们。然而,对于使用new创建的数组,应使用另一种 格式的delete来释放:  

  delete [] psome;    // free a dynamic array

  方括号告诉程序,应释放整个数组,而不仅仅是指针指向的元素。请注意delete和指针之间的方括号。如果使用new时,不带方括号,则使用delete也不应带方括号。如果使用new时带方括号,则使用delete时也应带方括号。C++的早期版本无法识别方括号表示法。然而,对于ANSI/ISO标准来说,new与delete的格式不匹配导致的后果是不确定的,这意味着程序员不能依赖于某种特定的行为。下面是一个例子:

  int * pt = new int;

  short * ps = new short [500];

  delete [] pt;

  delete ps;

  总之,使用new和delete时,应遵守以下规则。

  ~不要使用delete来释放不是new分配的内存。

  ~不要使用delete释放用一个内存块两次。

  ~如果使用new[]为数组分配内存,则应使用delete [ ] 来释放。

  ~如果使用new 为一个实体分配内存,则应使用delete(没有方括号)来释放。

  ~对空指针应用delete是安全的。

  

  为数组分配内存的通用格式如下:

  type_name * pointer_name = new type_name [num_elements];

  

这篇关于C++使用new来创建动态数组的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!