0

我有一个函数来乘以数组。功能是multiply

void multiply(int array1[][], array2[][]);

但它不起作用。

例如我必须数组

int array1[4][10]
int array2[10][6]
multiply(arra1[4][10], array2[10][6])

但它不起作用。

我需要任何大小的调用函数。

稍后我需要调用该函数:

int array3[5][5]
int array4[5][5]
multiply(arra1[5][5], array2[5][5])

如何获取函数中的数组?

多维数组必须具有除第一个维度之外的所有维度的边界

我需要可变行和可变列

4

4 回答 4

0

您似乎使用了 multiply 函数,就像它的定义是这样的: void multiply(int number1, int number2); 也许您应该发布乘法函数的完整定义

于 2013-06-29T23:17:28.783 回答
0

C 风格的数组并不是真正的数组,而是一组指针数学技巧。您根本无法从函数中返回这样的数组,而传入实际上只是在引擎盖下传递了一个指针。

由于指针适用于简单数组并且使用相同的语法,我们可以忘记这种差异。在这种情况下,参数中的数组 externt 将被完全忽略。

使用 2D 数组,它的工作方式将不再相同,因为要使指针数学工作,您必须通过适当的“切片”。因此,除了第一个数组范围之外的所有范围都是强制性的。您可以将第一个留空或像以前一样使用任何数字。

当然,要使函数真正有用,您必须将第一个范围也作为单独的参数传递,除非函数可以以某种方式从数据中找出它。

void multiply(const int in_array1[][10], const int in_array2[][10], int rows, int out_array[][10]);

将具有 10 列和可变行的数组相乘可能是一个很好的函数。

如果您需要全变量,只需传入 (int* arr, int rows, int cols) 并自己计算单元格位置。

于 2013-06-29T23:18:10.070 回答
0

除非您有使用数组的特定原因,否则请使用 std::vector 对数组进行建模。例子:

vector< vector<int> > myArray1(3, vector<int>(2,0));
vector< vector<int> > myArray2(3, vector<int>(2,0));

// ... 

vector< vector<int> > multiply(vector< vector<int> > &myArray1, 
                               vector< vector<int> > &myArray2) {

    vector< vector<int> > result(myArray1.length(), myArray2[0].length());

    for(int i = 0; i < myArray1.length(); i++){
        for(int j = 0; j < myArray1[i].length(); j++){
            // ...
        }
    }

    return result;
}
于 2013-06-29T23:25:07.233 回答
0

您可以使用multiply().

template <unsigned L, unsigned M, unsigned N>
void multiply (int (&array1)[L][M], int (&array2)[M][N]) {
    //...
}

int main () {
    int array1[4][10];
    int array2[10][6];
    int array3[2][2];
    multiply(array1, array2);  // ok, inner dimensions match
    multiply(array1, array3);  // fail, inner dimensions don't match
}

数组的维度将由模板函数调用的类型推导确定。

于 2013-06-29T23:33:29.950 回答