用c语言编写一个函数试用数组指针的方法实现计算两个矩阵的乘法,并将结果存储在一个新的矩阵中
时间: 2024-12-29 16:35:47 浏览: 22
在C语言中,我们可以使用二维数组指针来实现矩阵相乘。矩阵乘法规则是两个矩阵A(m×n)和B(n×p),它们可以相乘得到一个新的矩阵C(m×p),其中每个元素C[i][j]等于A的第i行和B的第j列对应元素的乘积之和。
下面是一个简单的示例,展示了如何编写一个函数`matrix_multiply`,它接受两个指针`A`和`B`作为输入,这两个指针指向包含两个矩阵的内存区域,以及它们的维度信息`(m, n)`和`(n, p)`。函数会返回一个新的矩阵指针`C`,并动态分配内存来保存结果:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个函数,用于计算矩阵乘法
void matrix_multiply(int** A, int* B, int m, int n, int p, int** C) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
// 初始化结果C[i][j]
C[i][j] = 0;
for (int k = 0; k < n; k++) {
// 根据矩阵乘法公式计算
C[i][j] += A[i][k] * B[k][j];
}
}
}
}
int main() {
const int rows_A = 3, cols_A = 2;
const int rows_B = 2, cols_B = 4;
// 动态创建矩阵A、B和结果矩阵C
int** A = malloc(rows_A * sizeof(int *));
int** B = malloc(rows_B * sizeof(int *));
int** C = malloc(rows_A * sizeof(int *));
// 初始化矩阵A和B
for (int i = 0; i < rows_A; i++) {
A[i] = malloc(cols_A * sizeof(int));
for (int j = 0; j < cols_A; j++) {
A[i][j] = i + j; // 示例数据
}
}
for (int i = 0; i < rows_B; i++) {
B[i] = malloc(cols_B * sizeof(int));
for (int j = 0; j < cols_B; j++) {
B[i][j] = i * 2 + j; // 示例数据
}
}
// 计算矩阵乘法
matrix_multiply(A, B, rows_A, cols_B, cols_A, C);
// 输出结果矩阵C
for (int i = 0; i < rows_A; i++) {
for (int j = 0; j < cols_A; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < rows_A; i++) {
free(A[i]);
}
free(A);
free(B);
free(C);
return 0;
}
```
阅读全文