static int iarray[2][3]={ 5, 1, 6, //элементы матрицы 20, 15, 0};
int *par[ ] ={iarray[0], iarray[1]}; //определение и инициализация вспомогательного // массива указателей, имя которого – // это, по сути, «указатель на указатель на целое»
isum = adder(par, 2, 3); //вызов функции и передача ей адреса массива указателей //т.е. адреса нулевой строки
cout << "isum=" << isum << endl; // или cout << "isum=" << adder(par, 2, 3) << endl;
getch();
return 0;
}
intadder (int **mas, intn, intm) //заголовок функции - полное соответствие прототипу
{
int ipartial=0;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
ipartial +=mas[i][j];
return (ipartial);
}
или еще иначе:
#include <iostream.h> //способ 6
#include <conio.h>
main()
{ int isum;
intadder (int* [ ], int, int); //прототип функции с параметром «массив указателей на целое»
static int iarray[2][3]={ 5, 1, 6, 20, 15, 0};
int *par[]={iarray[0], iarray[1]}; //определение и инициализация // вспомогательного массива указателей
isum = adder(par, 2, 3); //вызов функции и передача ей адреса нулевой строки
cout << "isum=" << isum << endl; // или cout << "isum=" << adder(par, 2, 3) << endl;
getch();
return 0;
}
intadder (int *mas[ ], intn, intm) //заголовок функции соответствует прототипу
{int ipartial=0;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
ipartial +=mas[i][j];
return (ipartial); //возврат значения в функцию
}
Динамические двумерные массивы
1. Динамический двумерный массив как одномерный
#include <stdio.h>
#include <stdlib.h>
const int n=3;
const int m=3;
main ()
{int i, j;
static double *par = (double * )malloc (n*m * sizeof(double)); // new double [ n*m];
for (i=0; i<n; i++)
for (j=0; j<m; j++)
scanf("%lf", &par[i*m+j] ); // или (par+i*m+j)
for (i=0; i<n; i++)
{for (j=0; j<m; j++)
printf ("%10.3lf", par[i*m+j]); // или*(par+i*m+j)
printf ("\n");
}
free (par); //delete [ ] par;
return 0;
}
Динамический двумерный массив с использованием массива указателей на строки:
#include <stdio.h>
#include <stdlib.h>
main ()
{int i, j;
const int r=3;
const int c=4;
static double**a = new double * [r]; //выделяется памятьпод массив указателей на строки массива
for (i=0; i<r; i++)
a[i] = new double [c]; // цикл для выделения памяти под строку массива
for (i=0; i<r; i++) //цикл для ввода элементов матрицы
for (int j=0; j<c; j++)
scanf ("%lf", a[i] +j); //или cin >> a[i][j];
for (i=0; i<r; i++) //цикл для вывода элементов матрицы
{for (j=0; j<c; j++)
printf ("%10.3lf", *(a[i]+j)); // или cout << a[i][j];
printf ("\n");}
printf ("\n");
for (i=0; i<r; i++)
delete [ ] a[i]; // цикл для освобождения памяти строк массива
delete [ ] a; //освобождается памятьмассива указателей
return 0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.