Циклы. Инициализация массива размерности n случайными целыми положительными значениями от 0 до 32767, страница 13

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;

}