单个变量和数组的动态指针分配有什么区别?

时间:2017-09-23 01:34:50

标签: c++ dynamic-memory-allocation

C ++中这三行之间有什么区别?

int *p= new int;
int *p= new int[10];
int *p = new int[];

我们已经动态地将内存声明为指针变量p,为什么需要特别提到指针数组大小?

1 个答案:

答案 0 :(得分:2)

int *p = new int;

这为类型为int的单个对象分配足够的内存,并在指向int变量p的指针中存储指向它的指针。这意味着*p引用了有效的int对象。

int *p = new int[10];

这为类型为int的十个对象分配足够的连续内存,并在指向int变量int的指针中存储指向第一个p的指针。这意味着p[0]p[9]会引用有效的int个对象。

int *p = new int[];

此语句在语法上不正确。它不是有效的C ++,因此没有任何意义。

  

...为什么需要特别提到指针数组大小?

如果您没有告诉它需要多少int个内存,内存分配器还应该知道要分配多少内存?