函数与c ++中具有2维的数组

时间:2013-06-29 23:10:03

标签: c++ arrays function

我有一个乘法数组的函数。该函数为multiply

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

但它不起作用。

例如我必须使用数组

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

但它不起作用。

我需要任何大小的call de function。

稍后我需要调用函数:

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

如何在函数中获取数组?

多维数组必须具有除第一个

之外的所有维度的边界

我需要变量行和变量列

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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)并自己计算单元格位置。

答案 2 :(得分: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;
}

答案 3 :(得分: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
}

数组的尺寸将由模板函数调用中的类型推导确定。