簡體   English   中英

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

[英]Strange C++ matrix multiplication/initialization

我正在使用Cygwin,Windows Vista,諾頓防病毒軟件(之前有人問過我)。 我之前曾問過一個關於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。 當數組是全局數組時,這是自動完成的,但在局部數組時,它不會自動進行(簡化,但說明了行為)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM