Вот программа на языке C, которая складывает две матрицы по диагонали с помощью указателей:
#include <stdio.h>
void addDiagonal(int *matrix1, int *matrix2, int size) {
int i, j;
int *result = (int *)malloc(size * sizeof(int));
for (i = 0; i < size; i++) {
*(result + i) = *(matrix1 + i) + *(matrix2 + i);
}
printf("Resultant diagonal matrix:\n");
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
if (i == j) {
printf("%d ", *(result + i));
} else {
printf("0 ");
}
}
printf("\n");
}
free(result);
}
int main() {
int matrix1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int matrix2[3][3] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
int size = sizeof(matrix1) / sizeof(matrix1[0]);
int *ptr1 = &matrix1[0][0];
int *ptr2 = &matrix2[0][0];
addDiagonal(ptr1, ptr2, size);
return 0;
}
В этой программе мы определяем функцию addDiagonal, которая принимает два указателя матрицы (matrix1и matrix2) и размер матрицы. Он динамически выделяет память для результирующей диагональной матрицы (result) с помощью malloc. Затем он вычисляет сумму соответствующих элементов в matrix1и matrix2и сохраняет результат в result. Наконец, он печатает результирующую диагональную матрицу.
В функции mainмы объявляем две матрицы 3×3 (matrix1и matrix2). Мы вычисляем размер матрицы, разделив общий размер матрицы на размер строки. Затем мы получаем указатели на первые элементы matrix1и matrix2, используя оператор адреса (&). Эти указатели передаются в функцию addDiagonal.