为什么数组乘法的答案值显示为内存值?

时间:2018-03-17 02:27:49

标签: c++

R是一个方形数组,其值由用户输入,此代码用于计算R * R。

int answers[M][M];

for(int i = 0; i < M; i++)
{
    for(int j = 0; j < M; j++)
    {
        for(int k = 0; k < M; k++)
        {
            answers[i][j] += R[i][k] * R[k][j];
        }
    }
}

当我使用printf显示答案的值时,它给了我一堆我认为的内存值:

for(int i = 0; i < M; i++)
{
    for(int j = 0; j < M; j++)
    {
        printf("%d ", answers[i][j]);
        if(j == (M-1))
        {
            printf("\n");
        }
    }
}

输出:

1606416087 32777 
3311 23 

1 个答案:

答案 0 :(得分:0)

我猜测你的answers数组具有自动存储持续时间,未初始化,并且在开始矩阵乘法之前包含不确定的值。如果将定义更改为:

int answers[M][M] = {};

每个元素的值都将初始化为0。

如果这些是非标准C ++扩展的可变长度数组(VLA),则这种初始化方法不起作用,您需要使用循环。

for(int i = 0; i < M; i++)
{
    for(int j = 0; j < M; j++)
    {
        answers[i][j] = 0;
    }
}