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
答案 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;
}
}