C ++:获取传递给函数的多维数组的行大小 [英] C++: getting the row size of a multidimensional array passed to a function

查看:114
本文介绍了C ++:获取传递给函数的多维数组的行大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想写一个函数来打印多维数组的内容。我知道列的大小,但不知道行的大​​小。

I'm trying to write a function that will print out the contents of a multidimensional array. I know the size of the columns, but not the size of the rows.

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

Since I didn't make this clear, the arrays passed to this function are NOT dynamically allocated. The sizes are known at compile time.

我使用3x2阵列测试它。这里是它的功能:

I am testing it using a 3x2 array. Here is the function as it stands:

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];
        }
    }
}

显然,我知道i的大小是3(在这种情况下)。但是,理想情况下,无论第一维的大小如何,我都希望该函数可以工作。

Obviously, this only works if I know the size of "i" is 3 (it is in this case). Ideally, however, I would like the function to work no matter what the size of the first dimension.

我想我可以使用sizeof()函数,例如

I thought I would be able to do this using the sizeof() function, e.g.

int size = sizeof(array1);

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

... and do some math from there.

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

Here's the odd part. If I use the sizeof() function inside the array, it returns a value of 4. I can use pointer notation to dereference the array:

int size = sizeof(*array1);

...但实际上返回的值为8.这很奇怪,是行(这是= 3)*列(= 2)* sizeof(int)(= 4)或24.而且,这是结果,当我使用sizeof(* array1) >的功能。

... but this actually returns a value of 8. This is odd, because the total size should be rows(which = 3) * columns(= 2) * sizeof(int)(= 4), or 24. And, indeed, this is the result, when I use sizeof(*array1) outside of the function.

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

Does anyone know what is going on here? More importantly, does anyone have a solution?

推荐答案

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

The answer is that you can not do this. You must pass the number of rows as an argument to the function, or use an STL container such as std::vector or std::array.

sizeof sizeof 永远不会用于确定C / C ++中对象的动态大小。你自己,程序员总是可以从 sizeof 查看代码和头文件计算 sizeof(x)计算用于表示对象的字节数。 array1 [i] 是两个的数组,因此 sizeof(* array1) > ints 4 == sizeof(int)。当你声明 int array1 [] [2] 这相当于 int * array1 [2] 。也就是说, array1 是一个指向两个整数数组的指针。 sizeof(array1)因此是4个字节,因为在你的机器上需要4个字节来表示一个指针。

sizeof is computed compile time; sizeof is never useful in determining dynamic size of objects in C/C++. You (yourself, the programmer) can always calculate sizeof(x) just from looking at code and header files since sizeof counts the number of bytes used to represent the object. sizeof(*array1) will always be 8 since array1[i] is an array of two ints and 4==sizeof(int). When you declare int array1[][2] this is equivalent to int *array1[2]. That is, array1 is a pointer to arrays of two integers. sizeof(array1) is therefore 4 bytes, since it takes 4 bytes on your machine to represent a pointer.

这篇关于C ++:获取传递给函数的多维数组的行大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆