Pole je dátová štruktúra, v ktorej sú dáta v pamäti uchovávané za sebou. Pritom všetky prvky jedného poľa sú rovnakého údajového typu (napr. int, char, float ...).
Deklarácia poľa vyzerá nasledovne:
<typ> <názov>[<veľkosť>];
int pole[10];
Pri deklarácií poľa dochádza k rezervovaniu miesta v pamäti RAM. Nedochádza však k odstráneniu údajov, ktoré tam zanechali iné programy. Preto je pole vhodné inicializovať.
int pole1[5] = {1, 2, 3, 4, 5};
int pole2[] = {1, 2, 3, 4, 5};
int pole3[5] = {1, 2};
int pole4[5] = {0};
Inicializáciu je možné vykonať len raz a to pri deklarácii poľa neskôr hodnotu prvkov možno meniť len ich prepísaním!
int pole[5] = {1, 2, 3, 4, 5};
int a = pole[0]; // v a bude 1. bunka poľa
int b = pole[1]; // v b bude 2. bunka poľa
int c = pole[5]; // POZOR!! Pole má veľkosť 5 prvkov. Tatko sa ale snažíme pristúpiť k šiestemu prvku. Jazyk C nemá kontrolu rozsahu poľa!
Zápis do bunky poľa:
pole[4] = 10;
pole[3] = a; // premenná a bola niekde predtým deklarovaná a inicializovaná
resp. načítanie zo štandardného vstupu:
scanf("%d", &pole[1]);
#include <stdio.h> int main() { int i; int pole[5] = {1,2,3,4}; for(i=0;i<6;i++) printf("%d ",pole[i]); } |
Veľkosť poľa v jazyku C môžeme zistiť pomocou operátora sizeof(). Návratová hodnota sizeof() predstavuje počet bajtov premennej, ktorej veľkosť je zisťovaná. Preto pre zistenie počtu prvkov poľa, je potrebné túto veľkosť deliť veľkosťou takého údajového typu, ako je samotné pole.
int pole[] = { 1, 5, 2, 3, 6, 8, 9, 7, 10, 18, 16, 14, 13, 15, 12, 11, 4, 17}; int size = sizeof(pole)/sizeof(int); |
Dynamická alokácia pamäte je pokročilá forma práce s pamäťou. Budeme sa o nej učiť neskôr. Teraz si však ukážeme ako je možné racionalizovať prácu s veľkosťou poľa. Zatiaľ sme vždy veľkosť poľa vedeli. Vedeli sme to preto lebo sme ju zadávali pri deklarácii poľa. Teda alokovali sme pamäť staticky. Niekedy programátor nevie koľko pamäte bude potrebovať a preto je potrebné aby sa alokovala dynamicky, teda za behu programu.
Predstavme si prípad keď program od používateľa najprv zistí koľko hodnôt zamýšľa zadať a až následne sa v alokuje potrebná pamäť.
Potom používateľ zadá požadovaný počet hodnôt.
#include<stdio.h> int main() { int pocet; printf("Zadaj pocet prvkov pola \n>> "); scanf("%d", &pocet); // Nacitanie poctu prvkov int pole[pocet]; // dynamicky alokovane for(int i=0; i<pocet; i++) { printf("Zadaj %d. prvok poľa \n>> ",i); scanf("%d",&pole[i]); //Nacitanie i-teho prvku } printf("\n POLE: "); for(int i=0; i<pocet; i++) { printf("%d ",pole[i]); } printf("\n"); return 0; } |
ab123cd@zapfei$ gcc -std=c11 -Werror -Wall -lm dynamic.c -o DYNAMIC ab123cd@zapfei$ ./DYNAMIC Zadaj pocet prvkov pola >> 4 Zadaj 0. prvok poľa >> 1 Zadaj 1. prvok poľa >> 2 Zadaj 2. prvok poľa >> 3 Zadaj 3. prvok poľa >> 4 POLE: 1 2 3 4 |