Rozdiel medzi ukazovateľom a poľom

Ukazovateľ vs Array

Ukazovateľ je typ údajov, ktorý obsahuje odkaz na miesto v pamäti (t.j. ukazovateľ ukazovateľa ukladá adresu miesta v pamäti, v ktorom sú uložené niektoré údaje). Polia sú najbežnejšie používanou štruktúrou údajov na ukladanie kolekcie prvkov. Väčšina programovacích jazykov poskytuje metódy na jednoduché deklarovanie polí a prístupových prvkov v poliach.

Čo je ukazovateľ?

Ukazovateľ je typ údajov, ktorý ukladá adresu miesta v pamäti, v ktorom sú uložené niektoré údaje. Inými slovami, ukazovateľ obsahuje odkaz na umiestnenie v pamäti. Prístup k údajom uloženým v mieste pamäte, na ktoré odkazuje ukazovateľ, sa nazýva dereferencovanie. Pri opakovaných operáciách, ako sú prechádzanie stromov / reťazcov, vyhľadávanie tabuliek atď., By použitie ukazovateľov zlepšilo výkon. Je to tak preto, že dereferenčné a kopírovacie ukazovatele sú lacnejšie ako skutočné kopírovanie a prístup k údajom označeným ukazovateľmi. Nulový ukazovateľ je ukazovateľ, ktorý neukazuje na nič. V Jave by prístup k nulovému ukazovateľovu generoval výnimku nazývanú NullPointerException.

Čo je pole?

Obrázok 1 je časť kódu, ktorá sa obvykle používa na deklarovanie a priradenie hodnôt k polu. Obrázok 2 zobrazuje, ako by pole vyzeralo v pamäti.

int hodnoty [5];

Hodnoty [0] = 100;

Hodnoty [1] = 101;

Hodnoty [2] = 102;

Hodnoty [3] = 103;

Hodnoty [4] = 104;

Obrázok 1: Kód na deklarovanie a priradenie hodnôt k poľu


100 101 102 103 104
Index: 0 1 2 3 4

Obrázok 2: Pole uložené v pamäti

Vyššie uvedený kód definuje pole, do ktorého je možné uložiť 5 celých čísel a ku ktorým sa pristupuje pomocou indexov 0 až 4. Jednou z dôležitých vlastností poľa je to, že celé pole je pridelené ako jeden blok pamäte a každý prvok získa svoj vlastný priestor v poli. , Akonáhle je pole definované, jeho veľkosť je pevná. Takže ak si nie ste istí veľkosťou poľa v čase kompilácie, budete musieť definovať dostatočne veľké pole, aby bolo na bezpečnej strane. Ale vo väčšine prípadov budeme používať menší počet prvkov, ako sme pridelili. Takže značné množstvo pamäte je skutočne zbytočné. Na druhej strane, ak „dostatočne veľké pole“ nie je v skutočnosti dosť veľké, program by zlyhal.

Aký je rozdiel medzi ukazovateľmi a poľami?

Ukazovateľ je typ údajov, ktorý ukladá adresu miesta v pamäti, v ktorom sú uložené niektoré údaje, zatiaľ čo polia sú najbežnejšie používanou dátovou štruktúrou na ukladanie kolekcie prvkov. V programovacom jazyku C sa indexovanie polí vykonáva pomocou aritmetiky ukazovateľa (t. J. Prvok poľa x by bol ekvivalentný * (x + i)). Preto sa v C môže množina ukazovateľov, ktoré poukazujú na súbor po sebe idúcich pamäťových miest, považovať za pole. Ďalej je rozdiel v tom, ako operátor operátora sizeof pracuje na ukazovateľoch a poliach. Ak sa použije na pole, operátor veľkosti vráti celú veľkosť poľa, zatiaľ čo pri použití na ukazovateľ by vrátil iba veľkosť ukazovateľa..