将char**转换为char [x] [x]

Ste*_*ing 2 c++ arrays pointers char multidimensional-array

在C++中,我希望我的类有一个char**字段,该字段将根据用户输入进行调整.基本上,我想做这样的事情 -

char** map;
map = new char[10][10];
Run Code Online (Sandbox Code Playgroud)

10是任何整数.我得到一个错误,说不能将char*[10]转换为char**.为什么我不能这样做 -

char* astring;
astring = new char[10];
Run Code Online (Sandbox Code Playgroud)

Ada*_*eld 6

因为数组不是指针.数组衰减成指向它们的第一个元素的指针,但这只发生在第一级:2D数组衰变成指向1D数组的指针,但就是它 - 它不会衰变成指向指针的指针.

operator new[]允许分配仅在运行时已知的大小的动态数组,但它只允许您分配1D数组.如果要分配动态2D数组,则需要分两步执行:首先分配指针数组,然后为每个指针分配另一个1D数组.例如:

char **map = new char*[10];  // allocate dynamic array of 10 char*'s
for(int i = 0; i < 10; i++)
    map[i] = new char[10];  // allocate dynamic array of 10 char's
Run Code Online (Sandbox Code Playgroud)

然后要释放数组,您必须反向释放所有内容:

for(int i = 0; i < 10; i++)
    delete [] map[i];
delete [] map;
Run Code Online (Sandbox Code Playgroud)