我在创建指向 char
的指针数组时使用 new[]
运算符时遇到问题。由于 char*
是我希望我的元素属于的类型,因此我使用括号将其括起来,但它不起作用:
char **p = new (char *)[vector.size()];
但是当我去掉括号时它起作用了:
char **p = new char *[vector.size()];
为什么后一种有效?
最佳答案
char *p = new char[10];
为大小为 10 个字符的数组动态分配一个内存块,并返回其第一个元素的地址,然后将其存储到 p
(使 p
指向此内存块的开头)。
在这种情况下,new
关键字后跟数组类型说明符,您指定类型:
char **p = new char*[10];
- 在这种情况下,类型是 char*
,而不是 (char*)
。检查operator new[]
你可能对 C 风格的 malloc
语法感到困惑,它的返回值类型总是 void*
,它可以被转换成不同的类型,这样你可以取消引用它。这就是您使用 (char*)
语法(C 风格类型转换)的情况:char *p = (char*) malloc(10);
尽管请注意,在 C 中,此转换是多余的:Do I cast the result of malloc?
请注意,使用 new[]
分配的内存应通过调用 delete[]
释放,而使用 malloc
分配的内存应为由 free
释放。
关于c++ - 创建指针数组时 operator new[] 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10795562/