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
}