利用指针计算2个矩阵的和
时间: 2023-06-14 13:04:37 浏览: 82
假设有两个矩阵 A 和 B,它们的行数和列数均为 n,我们可以使用指针来计算它们的和,具体步骤如下:
1. 定义一个 n × n 的矩阵 C 用来存储 A 和 B 的和。
2. 定义三个指针 a、b 和 c,分别指向矩阵 A、B 和 C 的起始位置。
3. 使用双重循环遍历 A 和 B 的所有元素,将相应位置的元素相加,并将结果存储到 C 中。具体实现如下:
```c++
void matrix_add(int** A, int** B, int** C, int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
*(*(C + i) + j) = *(*(A + i) + j) + *(*(B + i) + j);
}
}
}
```
其中,`*(*(C + i) + j)` 表示 C 矩阵中第 i 行第 j 列的元素,`*(*(A + i) + j)` 和 `*(*(B + i) + j)` 分别表示 A 和 B 矩阵中第 i 行第 j 列的元素。
相关问题
利用指针计算 2 个矩阵的和
假设有两个矩阵A和B,它们的维度都为m行n列。下面是使用指针计算矩阵和的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int m, n, i, j;
int **A, **B, **C;
// 输入矩阵维度
printf("请输入矩阵维度(m n): ");
scanf("%d %d", &m, &n);
// 动态分配矩阵空间
A = (int **)malloc(m * sizeof(int *));
B = (int **)malloc(m * sizeof(int *));
C = (int **)malloc(m * sizeof(int *));
for (i = 0; i < m; i++) {
A[i] = (int *)malloc(n * sizeof(int));
B[i] = (int *)malloc(n * sizeof(int));
C[i] = (int *)malloc(n * sizeof(int));
}
// 输入矩阵A
printf("请输入矩阵A:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}
// 输入矩阵B
printf("请输入矩阵B:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &B[i][j]);
}
}
// 计算矩阵和
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
C[i][j] = A[i][j] + B[i][j];
}
}
// 输出结果
printf("A + B =\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
// 释放矩阵空间
for (i = 0; i < m; i++) {
free(A[i]);
free(B[i]);
free(C[i]);
}
free(A);
free(B);
free(C);
return 0;
}
```
在上面的代码中,我们首先使用 `malloc()` 动态分配了3个二维数组 `A`、`B` 和 `C` 的空间,然后分别输入了矩阵A和矩阵B,最后使用2个嵌套的循环计算矩阵和并输出结果。最后,我们使用 `free()` 函数释放了矩阵空间,避免内存泄漏问题。
C语言利用指针计算2个矩阵的和
以下是C语言利用指针计算2个矩阵的和的示例代码:
```c
#include <stdio.h>
#define ROWS 2
#define COLS 2
void matrixAddition(int *matA, int *matB, int *result) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
*(result + i * COLS + j) = *(matA + i * COLS + j) + *(matB + i * COLS + j);
}
}
}
int main() {
int matrixA[ROWS][COLS] = {{1, 2}, {3, 4}};
int matrixB[ROWS][COLS] = {{5, 6}, {7, 8}};
int result[ROWS][COLS];
matrixAddition(&matrixA[0][0], &matrixB[0][0], &result[0][0]);
printf("Matrix A:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrixA[i][j]);
}
printf("\n");
}
printf("\nMatrix B:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrixB[i][j]);
}
printf("\n");
}
printf("\nResult:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
```
输出结果为:
```
Matrix A:
1 2
3 4
Matrix B:
5 6
7 8
Result:
6 8
10 12
```
在这个示例代码中,我们定义了一个 `matrixAddition` 函数,它接收指向两个矩阵的指针(`matA` 和 `matB`),以及指向结果矩阵的指针(`result`)。接下来,我们使用两个嵌套的循环,遍历每个矩阵中的元素,并将它们相加。最后,我们将结果存储在 `result` 矩阵中。
在 `main` 函数中,我们定义了两个输入矩阵 `matrixA` 和 `matrixB`,以及一个结果矩阵 `result`。我们使用 `&matrixA[0][0]`、`&matrixB[0][0]` 和 `&result[0][0]` 来传递指向这些矩阵的指针。最后,我们打印输出了每个矩阵以及它们的和。