Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
nižšej úrovne jazykov , ako je C alebo C + + , polia sú statické . Raz vyhlásil s hodnotou veľkosti, bude , že rad vždy tvrdí , že veľkosť . Kompilátor alokuje blok súvislej pamäte pre pole . Akékoľvek ďalšie funkcie alebo premenné , ktoré potrebujú pamäť bude umiestnený po poli . V dôsledku toho môže poľa nemení veľkosť bez prepísanie dát , ktorá ho nasleduje . Tak, napríklad , raz programátor deklaruje pole s dvadsiatimi miest , ktoré polia budú mať vždy dvadsať státie , či sú používané alebo nie , pre život dátové štruktúry .
Prideľovanie pamäte na heap
Aby sa toto obmedzenie obísť , ale programátori môžu alokovať pamäť na halde . Za normálnych okolností , premenné a polia deklarované v programe alebo funkcie sú umiestnené v zásobníku , čo v podstate predstavuje krátkodobú pamäť . Po celú dobu trvania funkcie poľa existuje na povrchové úpravy , pole je odstránený . Pomocou " novej " kľúčové slovo , však, programátor môže zhromažďovať pamäť z haldy , ktorá je dlhodobá pamäť , ktorá existuje mimo funkciu , ktorá deklaruje pole . Okrem toho môže programátor použiť haldy deklarovať pole dynamicky .
Dynamické pole
s poľami , programátor musí deklarovať veľkosť poľa na vyhlásenie . Táto veľkosť musí byť zastúpené na konštantnú hodnotu , a to buď konštantný premenné alebo číslo . Avšak, použitie " nové " operátor , programátor môže používať bežné premenné veľkosti polí a používateľ môže dokonca zadať hodnotu týchto premenných pri behu . Nasledujúci príklad ukazuje rozdiel :
int main ( ) { int
arr [ 5 ] ; //nové pole , musí byť dimenzované s konštantnou veľkosťou valueint = 5 ; int * dynamic_array = new int [ size ] ; //veľkosť poľa je dynamická
Zmena veľkosti poľa
týchto dynamických polí , programátor môže vytvoriť pole , ktoré môže byť zväčšená . " Vektor " trieda predstavuje dynamicky sa rozširujúcej alebo zmenšuje pole , ktoré Taks Výhodou dynamických polí . Nasledujúci príklad ukazuje , ako vytvoriť jednoduchý pole , ktoré rastie väčšie vo veľkosti :
int main ( ) {
int * arr = new int [ 5 ] ; int new_size = 10 ;
arr [ 0 ] = 1 ; arr [ 1 ] = 2 ;
/* Zmena veľkosti * /int * Arr2 = new int [ new_size ] ;
Arr2 [ 0 ] = arr [ 0 ] ; Arr2 [ 1 ] = arr [ 1 ] ;
delete [ ] arr ; arr = Arr2 ;
return 0 ; }