以下两个片段有什么区别?

时间:2017-08-18 07:40:30

标签: c++ pointers

char *t=new char();

char *t=new char[102];

因为我的代码被后者使用了吗?

//BISHOPS SPOJ

2 个答案:

答案 0 :(得分:6)

char *t=new char();

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

char *t=new char[102];

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

由于POD类型的默认构造函数是什么,不同之处在于分配的内存量(单个char与char数组)

答案 1 :(得分:4)

实际上两者都是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];的位置必须编写空括号,以明确说出它的数组。

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)