C++中这三行之间的区别是什么?单个变量和数组的动态指针分配有什么区别?
int *p= new int;
int *p= new int[10];
int *p = new int[];
我们已经宣布动态存储器的指针变量p,它为什么需要具体提及指针数组的大小?
C++中这三行之间的区别是什么?单个变量和数组的动态指针分配有什么区别?
int *p= new int;
int *p= new int[10];
int *p = new int[];
我们已经宣布动态存储器的指针变量p,它为什么需要具体提及指针数组的大小?
int *p = new int;
这为int
类型的单个对象分配足够的内存和存储在指向它的指针的指针TO- int
可变p
。这意味着*p
指的是有效的int
对象。
int *p = new int[10];
这为int
类型的10个对象分配足够的连续存储器和指针TO- int
可变p
存储一个指向所述第一int
。这意味着p[0]
到p[9]
指的是有效的int
对象。
int *p = new int[];
此声明在语法上不正确。它不是有效的C++,因此没有意义。
... why is it required to specifically mention pointer array size?
内存分配器是怎么回事应该知道多少内存来分配,如果你有多少int
的需要余地不告诉呢?
另外,应该注意的是,对于单个对象,单个对象的'new'必须与'delete'匹配,并且数组的'new []'必须与'delete []'匹配。 'new []'以这样一种方式存储数组数:'delete []'在释放底层内存块之前知道有多少对象需要破坏(如果需要的话)。 –
最后一个错误是:在']'标记之前期望的初级表达式 int * p = new int []; –