char *t=new char();
和
char *t=new char[102];
因为我的代码被后者使用了吗?
//BISHOPS SPOJ
答案 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)