简体   繁体   English

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

[英]Strange C++ matrix multiplication/initialization

I'm using Cygwin, Windows Vista, Norton anti-virus (someone asked me about this before). 我正在使用Cygwin,Windows Vista,诺顿防病毒软件(之前有人问过我)。 I previously asked a question about strange C++ behavior that no one could answer. 我之前曾问过一个关于C ++奇怪行为的问题,没人能回答。 Here's another. 这是另一个 Simple matrix multiplication exercise. 简单矩阵乘法练习。 This form below gives strange (and wrong) results: 下面的表格给出了奇怪(错误)的结果:

#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;
}

BUT a very small change gives correct results: (all I've done is move the initialized matrices outside main() ). 但是一个很小的变化就会给出正确的结果:(我所做的只是将初始化的矩阵移到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;
}

You forgot to initialize the array D to 0 in your first case. 您忘记在第一种情况下将数组D初始化为0。 This is automatically done when the array is global, but not when it is local (simplified, but explains the behavior). 当数组是全局数组时,这是自动完成的,但在局部数组时,它不会自动进行(简化,但说明了行为)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM