c++ - 奇怪的 C++ 矩阵乘法/初始化

标签 c++ matrix

我正在使用 Cygwin、Windows Vista、Norton 防病毒软件(之前有人问过我这个问题)。我之前问过一个关于奇怪的 C++ 行为的问题,但没人能回答。这是另一个。简单的矩阵乘法练习。下面的表格给出了奇怪的(错误的)结果:

#include <iostream>
#include <string>
#include<cmath>

using namespace std;

int main(int argc, char* argv[])
{
   int A[3][3]={{1,5,0},{7,1,2},{0,0,1}};
   int B[3][3]={{-2,0,1},{1,0,0},{4,1,0}};
   int D[3][3];
   for (int i=0;i<3;i++)
   {
      for(int j=0;j<3;j++)
      {
         for (int k=0;k<3;k++)
         {
            D[i][j]+=A[i][k]*B[k][j];

         }
      }
   }

   for (int i=0;i<3;i++)
   {
      for(int j=0;j<3;j++)
      {
         cout<<D[i][j]<<"\n";
      }}
   return 0;
}

但一个非常小的变化会给出正确的结果:(我所做的就是将初始化的矩阵移到 main() 之外)。

#include <iostream>
#include <string>
#include<cmath>

using namespace std;

int A[3][3]={{1,5,0},{7,1,2},{0,0,1}};
int B[3][3]={{-2,0,1},{1,0,0},{4,1,0}};
int D[3][3];

int main(int argc, char* argv[])
{
   for (int i=0;i<3;i++)
   {
      for(int j=0;j<3;j++)
      {
         for (int k=0;k<3;k++)
         {
            D[i][j]+=A[i][k]*B[k][j];

         }
      }
   }

   for (int i=0;i<3;i++)
   {
      for(int j=0;j<3;j++)
      {
         cout<<D[i][j]<<"\n";
      }}
   return 0;
}

最佳答案

在第一种情况下,您忘记将数组 D 初始化为 0。当数组是全局数组时会自动完成,但当它是本地数组时则不会(简化,但解释了行为)。

关于c++ - 奇怪的 C++ 矩阵乘法/初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35167999/

相关文章:

c++ - 合并静态库时 ar 命令不产生索引

c++ - 超过时限

matrix - 查找矩阵中的区域数

c++ - 如何在每个成员的基础上覆盖类范围的 __declspec(dllexport) 注释?

c++ - 保存霍夫曼码的问题?

c++ - 实时从数据读取器终端获取数据到 GUI

c++ - Metal - 针对内存延迟优化 GPU 矩阵乘法

c++ - 对称矩阵中的线性索引

matrix - 在 Octave 中求和矩阵的对角元素

r - r中多个矩阵的累积和