我有这个3d数组,我想通过指针或数组来传递函数,以检查第3个降级是否有元素, 这是我的阵列:
LevelsArray = new int**[LEVELS_COUNT];
for (int i = 0; i < LEVELS_COUNT; ++i)
{
LevelsArray[i] = new int*[MAX_ROW];
for (int j = 0; j < MAX_ROW; ++j)
{
LevelsArray[i][j] = new int[MAX_CELL];
for(int z =0;z < MAX_CELL; ++z)
{
LevelsArray[i][j][z] = 1;
}
}
}
现在,当我试图检查它的长度时,它总是给我1
当我尝试:
(sizeof((LevelsArray))/sizeof((LevelsArray[0][0])))
这里有2个问题
1.如何检查LevelsArray [0] [0]长度?
2.如何将此3d数组传递给检查数组[] []长度
答案 0 :(得分:5)
C ++和C数组非常简单;传递给函数时,他们不知道它们的大小和衰减成指针。 (或者当使用new
或malloc
在堆上分配内存时,它们已由指针表示 - 这就是为什么您的sizeof
- 代码将数组大小评估为1的原因。)
如果要使用简单的C ++数组,则必须显式传递维度,或者将C类型字符串与终止'\0'
一起定义一个sentinel值。将数组包装在跟踪尺寸的struct
中可能是个好主意,例如:
struct {
size_t dim1, dim2, dim3;
int*** data;
}
您可以在其中为内存管理编写构造函数和析构函数。