【发布时间】:2021-12-26 02:30:31
【问题描述】:
我想编写一个函数,让我们可以对 2 个 2D 矩阵进行乘法运算。此函数具有以下参数作为输入: list1 和 list2 是二维数组。它们作为指针传递给函数。 Row1, col1, row2, col2 是 list1 和 list2 的大小的 int 值。
当我有输入的方阵时,我会得到正确的结果。例如; list1[2][2] = {1,2,3,4} 和 list2[2][2] = {1,2,3,4} 给出结果 {7,10,15,22}。
当我不使用方阵时,我不会得到正确的结果。例如; list1[2][1] = {1,2} 和 list2[1][2] = {1,2} 给出的结果 {1,4,4,0} 是错误的,而 list1[2][1] = {1,2} 和 list2[1][2] = {1,2} 给出一个垃圾值而不是一个标量。
编辑:修复了返回指针问题,但我仍然没有得到正确的结果
#include <iostream>
using namespace std;
void printArray2D(int* list, int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
cout << list[i * col + j] << " ";
}
cout << "" << endl;
}
}
int* matrixMultiplication(int* list1, int* list2, int row1, int col1, int row2, int col2) {
if (col1 != row2) {
cout << "Array sizes don't match";
return NULL;
}
else {
int* newList = new int[5];
newList[0] = 0;
newList[1] = 0;
newList[2] = 0;
newList[3] = 0;
newList[4] = 0;
for (int i = 0; i < row1; i++) {
for (int j = 0; j < col2; j++) {
for (int k = 0; k < col1; k++) {
newList[i * col1 + j] = newList[i * col1 + j] + list1[i * col1 + k] * list2[k * col1 + j];
}
}
}
return newList;
}
}
int main()
{
int list1[2][1] = {1,2};
int list2[1][2] = {1,2};
int row1 = sizeof(list1) / sizeof(list1[0]);
int col1 = sizeof(list1[0]) / sizeof(list1[0][0]);
int row2 = sizeof(list2) / sizeof(list2[0]);
int col2 = sizeof(list2[0]) / sizeof(list2[0][0]);
int* result = matrixMultiplication((int*)list1, (int*)list2, row1, col1, row2, col2);
printArray2D((int*)result, row1, col2);
return 0;
}
【问题讨论】:
-
你返回指向在return语句后被销毁的局部变量的指针。编译器应该警告你这个问题,你不应该忽略编译器警告。
-
我把newList的返回值改成了result,现在和函数中的局部变量不一样了
-
您似乎必须投资任何一本好的 C++ 书籍。您没有更改返回值,而是重命名了目标变量名称。
-
这个
list2[k * col1 + j]不应该是list2[k * col2 + j]吗? -
还有,这个
newList[i * col1 + j] = newList[i * col1 + j]不应该是newList[i * col2 + j] = newList[i * col2 + j]?
标签: c++ function multidimensional-array