9.  Ukazovatele a polia

9.5  Pole ako parameter funkcie

Pole môže byť samozrejme aj parametrom funkcie. Skutočný parameter sa do funkcie potom odovzdáva odkazom - pomocou mena poľa sa vlastne odovzdá adresa jeho začiatku. Nesmieme teda zabudnúť na to, že prvky poľa môžeme vo funkcii meniť a táto zmena je trvalá - pracujeme s originálom poľa, nie s jeho lokálnou kópiou.

Funkcia, ktorá usporiada prvky poľa reálnych čísel podľa veľkosti môže mať funkčný prototyp:

void tried(double a[], int pocet);
alebo
void tried(double *a, int pocet);

Oba zápisy vyjadrujú to isté: "Od tejto adresy začína pole a". Uprednostňuje sa prvý spôsob, lebo je na prvý pohľad jasné, že ide o pole a nie o obyčajný pointer na double.

Možno sa čudujete nad tým, čo znamená ten druhý parameter pocet. Ide o počet prvkov poľa. Ak totiž vo funkcii pracujeme s poľom, potrebujeme poznať jeho veľkosť. Ak pracujeme s poliami, ktorých veľkosť nie je konštantná (napr. definovaná symbolickou konštantou v úvode programu takto: #define POCET 50), musíme ju funkcii oznámiť použitím ďalšieho parametra. Z adresy prvého prvku totiž nie je možné veľkosť poľa určiť, funkcia len "vie" kde pole začína.

  Na utriedenie prvkov poľa stačí už len použiť niektorý zo známych algoritmov napr. triedenie priamym výberom:

void tried(double a[], int pocet)  
{
   int i, j, min;
   double pom;
	
   for (i = 0; i < pocet - 1; i++) {
     min =  i;  			   
     for (j = i + 1;  j < pocet; j++) {
        if (a[i] < a[min]) min = i; 
     }
   }
  
   pom = a[min];
   a[min] = a[i];
   a[i] = pom;
}

Vo funkcii main funkciu tried zavoláme takto (na tom, či a je pole statické alebo dynamické nezáleží):

...
tried(a, pocet);  
...