C++:获取传递给函数的多维数组的行大小

Kar*_*ing 7 c++ sizeof multidimensional-array

我正在尝试编写一个打印出多维数组内容的函数.我知道列的大小,但不知道行的大​​小.

编辑:因为我没有说清楚,传递给这个函数的数组不是动态分配的.这些大小在编译时是已知的.

我正在使用3x2阵列进行测试.这是现有的功能:

void printArrays(int array1[][2], int array2[][2]) {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 2; j++) {
            cout << "\narray1[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array1[i][j]
                 << "\tarray2[" << i << "][" << j << "] = "
                 << setfill('0') << setw(2) << array2[i][j];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,这只有在我知道"i"的大小为3(在这种情况下)时才有效.然而,理想情况下,无论第一维的大小如何,我都希望该函数能够工作.

我以为我可以使用sizeof()函数来做到这一点,例如

int size = sizeof(array1);
Run Code Online (Sandbox Code Playgroud)

......从那里做一些数学.

这是奇怪的部分.如果我在数组中使用sizeof()函数,它返回值4.我可以使用指针表示法取消引用数组:

int size = sizeof(*array1);
Run Code Online (Sandbox Code Playgroud)

...但这实际上返回值8.这很奇怪,因为总大小应该是行(= 3)*列(= 2)*sizeof(int)(= 4)或24.这是结果,当我在函数之外使用sizeof(*array1)时.

有谁知道这里发生了什么?更重要的是,有没有人有解决方案?

Chr*_*ris 8

答案是你不能这样做.您必须将行数作为参数传递给函数,或使用STL容器(如std::vector或)std::array.

sizeof是计算编译时间; sizeof在C/C++中确定对象的动态大小永远不会有用.你(你自己,程序员)总是sizeof(x)可以通过查看代码和头文件来sizeof计算,因为它计算了用于表示对象的字节数.sizeof(*array1)将永远是8,因为array1[i]是一个两个ints和数组4==sizeof(int).当你宣布int array1[][2]这相当于int *array1[2].也就是说,array1是一个指向两个整数数组的指针.sizeof(array1)因此是4个字节,因为你的机器需要4个字节来表示指针.