gpt4 book ai didi

c - 如何在堆内存中存储矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:33 26 4
gpt4 key购买 nike

我下面的代码工作得很好。但是,我想知道如何将矩阵存储在堆内存中。该代码接受来自用户的 3 个正整数 a、b 和 c。然后用户输入两个矩阵。第一个矩阵是 n(行)乘以 m(列),第二个矩阵是 m(行)乘以 p(列)。

矩阵乘积/输出为 n 行 x p 列,例如;样本输入

4

3

2

14 9 3

2 11 15

0 12 17

5 2 3

12 259 10

8 5

示例输出

273 455

243 235

244205

102 160

int main(void) {
int row1, row2, col1, col2, i, j, e;
int temp, **matrix1, **matrix2, **mtxProduct;

scanf("%d", &row1);
scanf("%d", &col1);

temp = col1;
row2=temp;
scanf("%d", &col2);

if (col1 != row2) {
printf("\nIncorrect combination!\n");
return 1;
}

matrix1 = (int**) malloc(row1 * sizeof(int*));

//read elements of 1st matrix
for (i = 0; i < row1; i++) {
matrix1[i] = (int*) malloc(col1 * sizeof (int));
for (j = 0; j < col1; j++) {
scanf("%d %d %d\n", &matrix1[i][j], &matrix1[i][j], &matrix1[i][j]);
}
}

matrix2 = (int**) malloc(row2 * sizeof (int*));

//read elements of 2nd matrix
for (i = 0; i < row2; i++) {
matrix2[i] = (int*) malloc(col2 * sizeof (int));
for (j = 0; j < col2; j++) {
scanf("%d %d %d", &matrix2[i][j], &matrix2[i][j], &matrix2[i][j]);
}
}

mtxProduct = (int**) malloc(row1 * sizeof (int*));

for (i = 0; i < col2; i++) {
mtxProduct[i] = (int*) malloc(col2 * sizeof (int));
}

for (i = 0; i < row1; i++) {
for (j = 0; j < col2; j++) {
mtxProduct[i][j] = 0;
for (e = 0; e < row2; e++) {
mtxProduct[i][j] +=(matrix1[i][e] * matrix2[e][j]);
}
}
}

for (i = 0; i < row1; i++) {
for (j = 0; j < col2; j++) {
printf("%d ", mtxProduct[i][j]);
}
}
return 0;
}

最佳答案

如果你有一个现代的 C 编译器,从 C99 开始,它应该允许以下 ideom

double (*A)[m] = malloc(sizeof(double[n][m]));

这样的东西称为“可变修改类型”并带有必要的大小,因此编译器可以自行解析 A[i][j] 和类似的东西。

如果你是一个纯粹主义者,你甚至可以这样做:

double (*A)[n][m] = malloc(sizeof *A);

然后自己随身携带*,比如(*A)[i][j]

当您不再需要它时,不要忘记在末尾free 空间,free(A) 在这两种情况下都应该这样做。

关于c - 如何在堆内存中存储矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12193909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com