int main()
{
int n = 0;
int i = 0;
int j = 0;
int k = 0;
int **x;
int **y;
int **z;
printf("Enter size of matrix - (N x N):");
scanf("%d", &n);
x = malloc(n * sizeof(int *));
y = malloc(n * sizeof(int *));
z = malloc(n * sizeof(int *));
for(i = 0; i < n; i++)
{
x[i] = malloc(n * sizeof(int));
y[i] = malloc(n * sizeof(int));
z[i] = malloc(n * sizeof(int));
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
x[i][j] = (rand()% 10) + 1;
y[i][j] = (rand()% 10) + 1;
}
}
for(i = 0; i < n; i++)
{
printf("\n");
for(j = 0; j < n; j++)
{
printf("%2d ", x[i][j]);
printf("%2d ", y[i][j]);
}
}
for(i = 0; i < n; i++)
{
printf("\n\n");
for(j = 0; j < n; j++)
{
for(k = 0; k < n; k++)
{
z[i][j] += x[i][k] * y[k][j];
}
printf("%2d ", z[i][j]);
}
}
}
所以我正在尝试进行矩阵乘法运算,其中 2 个矩阵始终为 2x2 或 3x3 等。我想用随机值填充 2 个矩阵并进行乘法运算。我的问题是我存储答案的第三个矩阵产生了错误的值。例如,我的前 2 个矩阵(对于 2x2)包含值 [4、7、4、6] 和 [8、6、7、3],而我的输出是 [76、48、70、45],而实际上它应该是[81, 45, 74, 42]。不知道出了什么问题?
最佳答案
当您使用malloc()
分配内存时,您获得的空间不会自动初始化。它可以包含任何值。你用随机值填充你的 x
和 y
矩阵,但是你使用 z
的元素,就像它们来自 malloc()
。您希望在乘法的主要部分之前将它们设置为零。您可以通过首先使用 calloc()
分配它们来做到这一点,或者您可以在设置初始 x
和y
值。
关于c - 矩阵与 **pointer 相乘给出了错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009204/