C ++中这三行之间有什么区别?
int *p= new int;
int *p= new int[10];
int *p = new int[];
我们已经动态地将内存声明为指针变量p,为什么需要特别提到指针数组大小?
答案 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
个内存,内存分配器还应该知道要分配多少内存?