《C++ Primer Plus》学习笔记——使用new来创建动态数组

使用new来创建动态数组

在C++的使用过程中,我们可以通过创建数组的方式来管理同一类型的数据。声明一个数组的方式就必须知道数组的长度,如果我们并不知道数组的具体长度,我们就需要将数组的长度设置得足够大这必然会造成内存的浪费。因此,我们可以采用指针来创建动态数组。

在编译时给数组分配内存被称为静态联编(static binding),意味着数组实在编译时加入到程序中的。但使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编(dynamic binding),意味着数组实在程序运行时创建的。这种数组叫做动态数组(dynamic array)。使用静态联编时,必须在编写程序时制定数组的长度;使用动态联编时,程序将在运行时确定数组的长度。

  1. 创建
int N;
cin>>N;
int * psome=new int [N];
  1. 释放
delete [] psome;

方括号告诉程序,应释放整个数组,而不仅仅是指针指向的元素。

psome是指向一个int(数组第一个元素)的指针。也就是说,由于编译器不能对psome指向N个整数中的1个这种情况进行跟踪,因此编写程序时,必须让程序跟踪元素的数目。

实际上,程序确实跟踪了分配的内存量,以便以后使用delete []运算符时能够正确地释放这些内存。但这种信息不是公用的,例如,不能是同sizeof运算符来确定动态分配的数组包含的字节数。
为数组分配内存的通用格式如下:

type_name *pointer_name=new type_name [num_elements];

使用new运算符可以确保内存块足以存储num_elements个类型为type_name的元素,而pointer_name将指向第一个元素。
3. 使用
创建动态数组后,如何使用它呢?在我们以前创建的长度固定的数组,数组的每个元素都有一个下标(索引)。在上面创建动态 数组的时候,我们用到了一个指向int的指针psome,它指向动态数组的第一个元素,指向的空间存储的类型为int,4个字节。所以我们可以采用两种方式访问数组的元素。
方法一,可以同样使用下标的方式访问:比如,访问动态数组的第一个元素psome[0],访问第二个元素psome[1]…以此类推。
方法二,采用指针的方式,比如:

//访问第一个元素*psome,访问第二个元素  *(psome+1),访问第三个元素*(psome+2)...以此类推。

猜你喜欢

转载自blog.csdn.net/qq_41789960/article/details/106364540