利用指针计算2个矩阵的和
时间: 2024-05-01 15:20:13 浏览: 12
假设有两个矩阵 A 和 B,它们的大小都是 m 行 n 列。那么它们的和矩阵 C 也是 m 行 n 列。
我们可以定义三个二维数组指针,分别指向矩阵 A、B 和 C,然后遍历两个矩阵,并将它们的对应元素相加,存储到 C 矩阵的对应位置上。
以下是一个示例代码:
```
#include <stdio.h>
int main() {
int m = 3, n = 3; // 矩阵大小
int A[m][n], B[m][n], C[m][n]; // 定义三个二维数组
// 初始化 A 和 B 矩阵
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = i + j;
B[i][j] = i - j;
}
}
// 定义三个二维数组指针
int (*pA)[n] = A;
int (*pB)[n] = B;
int (*pC)[n] = C;
// 遍历两个矩阵,计算它们的和
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
*(pC[i] + j) = *(pA[i] + j) + *(pB[i] + j);
}
}
// 输出结果
printf("A:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", A[i][j]);
}
printf("\n");
}
printf("B:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", B[i][j]);
}
printf("\n");
}
printf("C:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
A:
0 1 2
1 2 3
2 3 4
B:
0 -1 -2
1 0 -1
2 1 0
C:
0 0 0
2 2 2
4 4 4
```
可以看到,矩阵 A 和 B 的和矩阵 C 正确地计算出来了。