我是靠谱客的博主 欢喜黄蜂,最近开发中收集的这篇文章主要介绍C++用new创建动态数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果通过像下面这样一般的方法来声明数组,则在程序编译的时候为其分配内存,不管程序最终是否用到这个数组,数组都在那里并占用内存,即静态联编。但是如果使用new,则在运行阶段需要它才进行创建,不需要则不创建,这叫动态联编,这种创建的数组叫做动态数组。并且静态联编必须在写程序时就声明数组长度,而动态联编在运行时才确定数组的长度。

int arr[5];

用new创建动态数组:

double *p3 = new double[3];

上述代码使得声明一个长为3,类型为double的动态数组。

delete动态数组:

delete []p3;

 使用new和delete时应遵守的规则:

声明完动态数组,我们可以通过下面的方式进行初始化:

  • 默认情况下,new分配的对象都有默认初始化
int *p1=new int[10];   //10个未初始化的int
int *p2=new int[10](); //10个初始化为0的int
string *p3=new string[10];  //10个空的string
string *p4=new string[10]();//10个空的string
  • C++11标准:花括号初始化器初始化
int *p1=new int[5]{0,1,2,3,4};
string *p3=new string[3]{"a","the",string(3,'x')};
  • bad_array_new_length异常:当初始化数目大于元素数目时,new表达式失败,抛出此异常。此异常定义在new头文件中

并且动态分配一个空数组是合法的!

  • 动态分配一个数组是合法的,new返回一个合法的非空指针,此指针保证与new返回的其它任何指针都不相同。但是不能对此指针解引用
  • 普通数组定义一个空数组是不允许的
int arr[0];  //错误
int *p = new int[0];  //正确

动态数组的访问:

我们创建了一个动态数组指针p3后,我们可以通过p3[i]来直接访问数组中的第i个元素。请注意!这与我们一般使用*(p3 + i)来访问不同!

 可以看到,上述代码将指针p3当作数组名使用 。


下面不妨让我们再了解下new一下其他数据结构的操作吧:

  •  比如我们Leetcode中的常客:单链表,其数据结构定义如下
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

 这时我们可以用new来新建一个链表节点:

ListNode *p1 = new ListNode(-1);
  • 我们还可以用new来创建任意自定义数据类型 

 参考资料:

C++:34---动态数组(new)_董哥的黑板报的博客-CSDN博客_c++动态数组 new

最后

以上就是欢喜黄蜂为你收集整理的C++用new创建动态数组的全部内容,希望文章能够帮你解决C++用new创建动态数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部