为什么我的C++代码在使用指针算术时会给出不正确的矩阵乘法结果?
我正在尝试:
我试图在C++中实现矩阵乘法,并使用指针算法访问矩阵元素。然而,我的程序产生了不正确的结果。以下是我迄今为止编写的代码:
#include <iostream>
#include <vector>
void multiply_matrices(int* A, int* B, int* C, int n) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
*(C + i * n + j) = 0; // Clear the element in C
for (int k = 0; k < n; ++k) {
*(C + i * n) += *(A + i * n + k) * *(B + k * n + j);
}
}
}
}
int main() {
int n = 3;
int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int B[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int C[9] = {0}; // Resultant matrix
multiply_matrices(A, B, C, n);
std::cout << "Matrix C (result):\n";
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
std::cout << *(C + i * n + j) << " ";
}
std::cout << std::endl;
}
return 0;
}
问题:
我使用指针算术来访问矩阵的元素,但乘法结果不正确。结果是错误的,而不是产生正确的矩阵乘积。
输出不正确:
Matrix C (result):
72 0 0
207 0 0
342 0 0
预期产量:
矩阵相乘的预期输出:
Matrix A:
1 2 3
4 5 6
7 8 9
Matrix B:
9 8 7
6 5 4
3 2 1
应该是:
Matrix C (result):
30 24 18
84 69 54
138 114 90
问题:
有人能解释一下我做错了什么,为什么乘法结果不正确吗?我怀疑使用指针访问矩阵元素的方式可能存在问题。