Rozdíl mezi ukazatelem a polem

Ukazatel vs Array

Ukazatel je datový typ, který obsahuje odkaz na paměťové místo (tj. Proměnná ukazatele ukládá adresu paměťového místa, ve kterém jsou uložena některá data). Pole jsou nejčastěji používanou datovou strukturou pro uložení kolekce prvků. Většina programovacích jazyků poskytuje metody pro snadné deklarování polí a přístupových prvků v polích.

Co je Ukazatel?

Ukazatel je datový typ, který ukládá adresu místa v paměti, ve kterém jsou uložena některá data. Jinými slovy, ukazatel obsahuje odkaz na umístění v paměti. Přístup k datům uloženým v umístění paměti, na které odkazuje ukazatel, se nazývá dereferencování. Při provádění opakujících se operací, jako jsou procházení stromů / řetězců, vyhledávání tabulek atd., By použití ukazatelů zlepšilo výkon. Je tomu tak proto, že dereferenční a kopírovací ukazatele jsou levnější než skutečné kopírování a přístup k datům označeným ukazateli. Nulový ukazatel je ukazatel, který neukazuje na nic. V Javě by přístup k nulovému ukazateli generoval výjimku nazvanou NullPointerException.

Co je pole?

Na obrázku 1 je znázorněn kus kódu, který se obvykle používá k deklarování a přiřazování hodnot matici. Obrázek 2 ukazuje, jak by pole vypadalo v paměti.

int hodnoty [5];

hodnoty [0] = 100;

hodnoty [1] = 101;

hodnoty [2] = 102;

hodnoty [3] = 103;

hodnoty [4] = 104;

Obrázek 1: Kód pro deklarování a přiřazování hodnot matici


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

Obrázek 2: Pole uložené v paměti

Výše uvedený kód definuje pole, do kterého lze uložit 5 celých čísel a jsou k nim přistupovány pomocí indexů 0 až 4. Jednou důležitou vlastností pole je, že celé pole je přiděleno jako jeden blok paměti a každý prvek získá svůj vlastní prostor v poli. . Jakmile je pole definováno, jeho velikost je pevná. Takže pokud si nejste jisti velikostí pole v době kompilace, budete muset definovat dostatečně velké pole, aby bylo na bezpečné straně. Ve většině případů však ve skutečnosti použijeme méně prvků, než jsme přidělili. Takže značné množství paměti je ve skutečnosti zbytečné. Na druhou stranu, pokud „dostatečně velké pole“ není ve skutečnosti dostatečně velké, program by se zhroutil.

Jaký je rozdíl mezi ukazateli a poli?

Ukazatel je datový typ, který ukládá adresu místa v paměti, ve kterém jsou uložena některá data, zatímco pole jsou nejčastěji používanou datovou strukturou pro ukládání kolekce prvků. V programovacím jazyce C se indexování pole provádí pomocí aritmetiky ukazatele (tj. I-tý prvek pole x by byl ekvivalentní * (x + i)). Proto v C lze sadu ukazatelů, které ukazují na řadu paměťových míst, která jsou po sobě, považovat za pole. Dále je rozdíl v tom, jak velikost operátoru pracuje na ukazatelích a polích. Při použití na pole vrátí operátor sizeof celou velikost pole, zatímco při použití na ukazatel vrátí pouze velikost ukazatele.