Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中具有二维数组的函数+;_C++_Arrays_Function - Fatal编程技术网

C++ 在c+中具有二维数组的函数+;

C++ 在c+中具有二维数组的函数+;,c++,arrays,function,C++,Arrays,Function,我有一个乘法数组的函数。该函数为乘法: 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]

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

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])
如何获取函数中的数组

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


我需要变量行和变量列

您似乎使用了乘法函数,就像它的定义一样:void multiply(int number1,int number2);
也许你应该发布乘法函数的整个定义,C风格的数组不是真正的数组,而是指针数学的一组技巧。您根本无法从函数返回这样的数组,而传入实际上只是在幕后传递一个指针

由于指针对简单数组很有效,并且使用相同的语法,我们可以忽略这一差异。在这种情况下,将完全忽略参数中的数组外部

对于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)并自己计算单元格位置。

使用std::vector对数组建模,除非您有使用数组的特定原因。 例如:

vectormyArray1(3,vector(2,0));
向量myArray2(3,向量(2,0));
// ... 
向量<向量>乘法(向量<向量>myArray1,
向量&myArray2){
vector结果(myArray1.length(),myArray2[0].length());
对于(int i=0;i
您可以使用
multiply()
的模板定义来实现这一点

模板
无效乘法(整数(&array1)[L][M],整数(&array2)[M][N]){
//...
}
int main(){
国际阵列1[4][10];
国际阵列2[10][6];;
国际阵列3[2][2];
乘法(array1,array2);//确定,内部尺寸匹配
乘法(array1,array3);//失败,内部尺寸不匹配
}

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

但我需要变量行和变量列,但如果我只是传入(int*arr,int rows,int cols)并计算单元格位置,请告诉我:数组订阅的无效类型“int[int]”类似于arr[5*cols+6]你用C和C++标记这个,但是在标题中询问C++。你应该问每个问题只有一个,因为这个问题的答案将不同于C和C++。应删除此问题的C标记,如果您对C答案感兴趣,则应创建一个单独的问题。其他问题可能重复或大量重复。
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;
}
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
}