0 c types pointers matrix-multiplication
我将一个矩阵输入到一个函数中,我想输出它本身的乘法。我无法设法以正确的格式返回结果。
int **multiplyMatrix(int matrixA[10][10], int matrixB[10][10], int n)
{
int matrixC[10][10] = { 0 };
int rowC, columnC = 0;
int i = 0;
int* ptr = matrixC;
for (rowC = 0; rowC < n; rowC++)
{
for (columnC = 0; columnC < n; columnC++)
{
i = 0;
for (i = 0; i < n; i++)
{
matrixC[rowC][columnC] += matrixA[rowC][i] * matrixB[i][columnC];
}
}
}
return *ptr;
}
Run Code Online (Sandbox Code Playgroud)
乘法工作正常,如果我在函数中打印矩阵,我会得到正确的结果,但我无法将值返回到 main()
void main()
{
int n=2;
int matrixA[10][10] = { 0 };
int result[10][10] = { 0 };
setMatrix(matrixA, n); // set values from user to the matrix
printMatrix(matrixA, n); // print matrix in format
**result = multiplyMatrix(matrixA, matrixA, n);
printMatrix(result, n);
}
Run Code Online (Sandbox Code Playgroud)
result中只有result[0][0]的正确值,所有其他值仍然是0。
例如,矩阵 A 的值为 {1,2,3,4},相乘后为 {7,10,15,22},但 main() 中的结果值为 {7,0,0,0}。如何将multiplyMatrix()中矩阵的其他值设置为结果I main?
你这里有两个问题。
首先,函数的返回类型与您返回的类型不匹配。表达式*ptr的类型int[10]衰减为int *,函数返回int **。您可能想要返回整个 2D 数组,而不仅仅是其中的一行,因此该函数必须返回一个,即int (*)[10]指向大小为 10 的数组的指针。
这就导致了第二个问题。即使您返回了正确的类型,您也会返回一个指向局部变量的指针。该变量的生命周期在函数返回时结束,并且取消引用指向不再存在的变量的指针会触发未定义的行为。
这里最简单的解决方案是将结果数组简单地传递给函数并填充它而不是本地数组。
void multiplyMatrix(int matrixA[10][10], int matrixB[10][10],
int matrixC[10][10], int n)
{
int rowC, columnC = 0;
int i = 0;
for (rowC = 0; rowC < n; rowC++)
{
for (columnC = 0; columnC < n; columnC++)
{
for (i = 0; i < n; i++)
{
matrixC[rowC][columnC] += matrixA[rowC][i] * matrixB[i][columnC];
}
}
}
}
int main()
{
int n=2;
int matrixA[10][10] = { 0 };
int result[10][10] = { 0 };
setMatrix(matrixA, n); // set values from user to the matrix
printMatrix(matrixA, n); // print matrix in format
multiplyMatrix(matrixA, matrixA, result, n);
printMatrix(result, n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |