以下结构是否符合C ++标准,以及在此声明之后我可以用arr做什么?
char* arr = new char[];
提前致谢。
答案 0 :(得分:5)
不,这是不允许的。 [expr.new] / 1中 new-expression 的语法指定
noptr-new-declarator :
[
表达式]
attribute-specifier-seq opt
noptr-new-declarator [ constant-expression ] attribute-specifier-seq 选择子>
显然,代码中的括号之间没有表达式。它也没有意义:你怎么能分配一个未知长度的数组呢?
如果您需要一个动态更改大小的数组,请使用std::vector
。
答案 1 :(得分:1)
C ++编译器offen定义扩展允许声明size = 0的数组。通常,它可以用于声明结构中的最后一个字段,以便在结构分配期间选择此类数组的长度。
struct A
{
float something;
char arr[];
};
因此,如果您想分配这样的A,让我们说arr有7个元素,那么你可以:
A* p = (A*)malloc( sizeof(A) + sizeof(char)*7) ;
你应该注意sizeof(A)等于sizeof(float),所以对于编译器你的arr字段是0大小。
现在您可以使用最多7个索引的arr字段:
p->arr[3]='d';