我需要创建一个具有动态分配内存的二维数组(两个维度都将在运行时设置),但出于效率目的,我想创建一个具有连续分配内存的一维版本,但又不知何故想要将其用作二维数组。有没有办法使用类型转换来实现这一点。 我要实现的用法如下,显然行不通。 最好的,
int size = 4;
int* arr = new int[size];
arr[0] = 10;
arr[1] = 11;
arr[2] = 12;
arr[3] = 13;
cout << (int[][2])arr[1][1] << endl;
最佳答案
虽然我认为 Codor 的解决方案最符合 C++ 的编码风格,但我想分享我用 C 风格完成的解决方案。
#include <iostream>
typedef int (*pint2)[2]; //pint2 is a pointer to an array of 2 ints
int main()
{
int arr[4] = { 0, 1, 2, 3 };
pint2 parr = (pint2)arr;
std::cout << parr[0][0] << std::endl;
std::cout << parr[0][1] << std::endl;
std::cout << parr[1][0] << std::endl;
std::cout << parr[1][1] << std::endl;
getchar();
return 0;
}
希望对您有所帮助! (或者至少你发现这很有趣:/)
编辑:对于可变长度的数组!
#include <iostream>
int main()
{
int arr[12] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
const int sizeofarr = sizeof(arr)/sizeof(arr[0]); //Number of elements in array
{
const int numofrows = 2; //Number of rows
const int numofcolumns = sizeofarr/numofrows; //Number of columns
typedef int (*pinta)[sizeofarr/numofrows]; //A 2D array of columns of 2
pinta parr = (pinta)arr;
for(int i = 0; i < numofrows; ++i)
for(int j = 0; j < numofcolumns; ++j)
std::cout << parr[i][j] << std::endl;
}
{
const int numofrows = 3; //Number of rows
const int numofcolumns = sizeofarr/numofrows; //Number of columns
typedef int (*pinta)[sizeofarr/numofrows]; //A 2D array of columns of 3
pinta parr = (pinta)arr;
for(int i = 0; i < numofrows; ++i)
for(int j = 0; j < numofcolumns; ++j)
std::cout << parr[i][j] << std::endl;
}
getchar();
return 0;
}
关于c++ - 在 C++ 中将一维数组转换为二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27503461/