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)
?
因为数组不是指针.数组衰减成指向它们的第一个元素的指针,但这只发生在第一级: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)
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |