以下两个代码段有什么区别?

What is the difference between following two snippets?

本文关键字:什么 区别 代码 两个      更新时间:2023-10-16
char *t=new char();

char *t=new char[102];

因为我的代码被使用后者接受?

//BISHOPS SPOJ
char *t=new char();

为单个字符分配内存,并调用默认构造函数。

char *t=new char[102];

创建一个包含 102chars 的数组并调用默认构造函数。

由于 POD 类型的默认构造函数什么都没有,区别在于分配的内存量(单个字符与字符数组(

实际上两者都是char上的指针,但第二个是指向数组char指针。

这允许您将 102 个字符存储到数组中。

char *t=new char[102];
0   1   2   3       101
+---+---+---+---+ ... +---+
|   |   |   |         |   |
+---+---+---+---+ ... +---+
^
|
-----------------------------+---+
| * |
+---+
t

它允许您取消引用这些索引 0-101。


而第一个只允许您存储一个字符。

char *t=new char();
0
+---+
|   |
+---+
^
|
-----------------------------+---+
| * |
+---+
t

取消引用0以外的其他索引将导致超出边界和未定义行为的访问。


删除

删除字符char *t=new char();

delete t;

在哪里删除数组char *t=new char[102];你必须写空的 bracks,明确地说它是一个数组。

delete [] t;

与这些代码相同

char *t = new char[10];  // Poitner to array of 10 characters
char *t = new char(10);  // Pointer to one character with value of 10

内存初始化

char *t = new char();      // default initialized (ie nothing happens)
char *t = new char(10);    // zero    initialized (ie set to 0)

数组

char *t = new char[10];   // default initialized (ie nothing happens)
char *t = new char[10](); // zero    initialized (ie all elements set to 0)