matrix乘法代码无法正常工作

问题描述 投票:0回答:1

为什么我的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; }

sissue:
我使用指针算术访问矩阵的元素,但是乘法结果不正确。结果不是生产正确的矩阵产品,而是错误的。

输出输出:

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

问题:

有人可以解释我在做什么错,为什么乘法结果不正确?我怀疑如何使用指针访问矩阵元素可能存在问题。
    

您有一个与矩阵索引有关的错误。

这条线:

c++ matrix
1个回答
0
投票

应该更改为:

//----------vvv----------------------------------------- *(C + i * n + j) += *(A + i * n + k) * *(B + k * n + j);

I.E。您需要添加第二个索引,就像在最终循环之前将元素归零时一样。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.