int i, j, nstr, nstb, *a;
printf("Введите количество строк и столбцов: \п");
scanf("%d%d", &nstr, &nstb);
а = (int *)malloc(nstr * nstb * sizeof(int));
for (i = 0; i<nstr; i++)
for (j = 0; j<nstb; j++) scanf("%d", &a[i * nstb + j ] ) ;
printf("Cyммa элементов a: %d\n", sum(a, nstr, nstb)):
return 0:}
int sum(const int *a, const int nstr, const int nstb){
int i , j, s = 0;
for (i = 0; i<nstr; i++)
for (j = 0; j<nstb; j++) s += a[i * nstb + j ] ;
return s:
}
Для того чтобы работать с двумерным массивом естественным образом, можно применять альтернативный способ выделения памяти:
#include <iostream>
int sum(int **a, const int nstr, const int nstb);
int main(){
int nstr, nstb;
cin >> nstr >> nstb;
int **a, i, j;
// Формирование матрицы а:
a = new int* [nstr];
for (i = 0; i < nstr; i++)
a[i] = new int [nstb];
for (i = 0; i < nstr; i++)
for (j = 0; j < nstb; j++) cin >> a[i][j];
cout << sum(a, nstr, nstb);
return 0;
}
Int sum(int **a, const int nstr, const int nstb){
int i, j, s = 0;
for (i = 0; i < nstr; i++)
for (j = 0; j < nstb; j++) s += a[i][j];
return s;
}
В этом случае память выделяется в два этапа: сначала под столбец указателей на строки матрицы, а затем в цикле под каждую строку. Освобождение памяти должно выполняться в обратном порядке.