C ++:获取传递给函数的多维数组的行大小 [英] C++: getting the row size of a multidimensional array passed to a function
问题描述
我想写一个函数来打印多维数组的内容。我知道列的大小,但不知道行的大小。
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屋!