for循环重新分配完全不相关的变量

时间:2017-12-02 03:06:41

标签: c++

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
const int xx = 8;
int Num[xx];
int Num9, Num10, Num11;
int StudentID;
int i;
int m = 0;
int j = 3;
int k = 6;
const int NUM_STUDENTS = 3;
const int NUM_DATA = 4;
int scores[NUM_STUDENTS][NUM_DATA] =
{{2046, 97, 79, 86},
 {7634, 91, 78, 79},
 {8120, 73, 77, 82}};

for(i=0;i<3;i++)
{
   Num[m]=scores[i][1] * 0.3;
    m++;
}

for(i=0;i<3;i++)
{
    Num[j]=scores[i][2] * 0.3;
    j++;
}

for(i=0;i<3;i++)
{
  Num[k]=scores[i][3] * 0.4;
    k++;
}

Num9=Num[0]+Num[3]+Num[6];
Num10=Num[1]+Num[4]+Num[7];
Num11=Num[2]+Num[5]+Num[8];

这是手边的代码。这个块:

 for(i=0;i<3;i++)
 {
   Num[k]=scores[i][3] * 0.4;
    k++;
 }

以某种方式将得分[0] [0]的值从2046更改为32.这个等式似乎正在执行它,因为当我阻止它将分数重置为2046时。为什么会这样? 我试过在那里重新编写等式,也没有任何反应。

1 个答案:

答案 0 :(得分:0)

问题出在const int xx = 8;

您声明int Num[xx];这是一个包含8个整数的数组。

接下来,在你的第3个循环中,你试图访问数组中第9个位置的Num[8],这样你就可以有效地编写Num[7]之后放置的内存scores[0][0] }

为了好玩,您可以尝试Num[10] = 1234,您也可以看到scores[0][2]也变为1234。