gpt4 book ai didi

c++ - 创建指针数组时 operator new[] 的语法

转载 作者:行者123 更新时间:2023-11-28 00:56:44 24 4
gpt4 key购买 nike

我在创建指向 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com