我的班级成员声明为:char (*buf)[]
。据我所知,这是一个指向未定义维度的字符数组的指针。在我的逻辑中,我想为这个数组动态分配内存:
buf = new char[100];
但是new返回char *
,所以编译器抱怨
error: assigning to 'char (*)[]' from incompatible type 'char *'
有没有办法将此指针存储在指向char数组的指针中?如果没有,那么能够像我上面那样声明指针的用途是什么?
我认为如果我可以存储数组指针会很有用,如果我调用delete
(没有[]),编译器会警告我。
答案 0 :(得分:1)
你可以用演员来做你想做的事情:
char (*buf)[];
buf = (char (*)[])new char[100];
(*buf)[0] = 5; // Assignment
//delete buf; <- compiler warning
delete[] buf;
答案 1 :(得分:1)
在标准中,buf
是“指向未知的char数组的指针”。您无法为其分配new-expression的结果(因为您无法动态分配未知边界的数组)。
如果数组是二维的,您可以将动态分配的内存分配给“指向char数组的指针”,例如char (*ptr)[2] = new char [100][2]
。
标准组中有open issue与此相关。如果该建议被采纳,则不会允许您的帖子中的示例,但它将允许char (*ptr)[] = new char [100][2]
。