Mutató vs tömb
A mutató olyan adattípus, amely egy memóriahelyre való hivatkozást tartalmaz (azaz egy mutatóváltozó egy olyan memóriahely címét tárolja, amelyben bizonyos adatok vannak tárolva). A tömbök a leggyakrabban használt adatstruktúra elemek gyűjteményének tárolására. A legtöbb programozási nyelv lehetőséget biztosít a tömbök egyszerű deklarálására és a tömbök elemeinek elérésére.
Mi az a mutató?
A mutató egy olyan adattípus, amely egy olyan memóriahely címét tárolja, amelyen bizonyos adatokat tárolnak. Más szavakkal, a mutató hivatkozást tartalmaz egy memóriahelyre. A mutató által hivatkozott memóriahelyen tárolt adatok elérését hivatkozás megszüntetésének nevezzük. Ismétlődő műveletek, például fák/karakterláncok bejárása, táblázatkeresés stb. végrehajtásakor a mutatók használata javítja a teljesítményt. Ennek az az oka, hogy a hivatkozások megszüntetése és a mutatók másolása olcsóbb, mint a mutatók által mutatott adatok tényleges másolása és elérése. A nullmutató olyan mutató, amely nem mutat semmire. Java nyelven a null mutató elérése egy NullPointerException nevű kivételt generál.
Mi az a tömb?
Az 1. ábrán látható egy kódrészlet, amelyet általában egy tömb deklarálására és értékek hozzárendelésére használnak. A 2. ábra azt mutatja be, hogyan nézne ki egy tömb a memóriában.
int értékek[5]; values[0]=100; értékek[1]=101; értékek[2]=102; values[3]=103; értékek[4]=104; |
1. ábra: Kód egy tömbhöz való értékek deklarálásához és hozzárendeléséhez
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
2. ábra: A memóriában tárolt tömb
A fenti kód egy tömböt határoz meg, amely 5 egész számot tud tárolni, és ezek 0-tól 4-ig terjedő indexekkel érhetők el. A tömb egyik fontos tulajdonsága, hogy a teljes tömb egyetlen memóriablokkként van lefoglalva, és minden elem megkapja a sajátját. saját hely a tömbben. Ha egy tömb definiálva van, a mérete rögzített. Tehát ha nem biztos a tömb méretében a fordítási időben, akkor elég nagy tömböt kell meghatároznia ahhoz, hogy a biztonságban legyen. De a legtöbbször valójában kevesebb elemet használunk, mint amennyit kiosztottunk. Tehát jelentős mennyiségű memória vész kárba. Másrészt, ha az „elég nagy tömb” valójában nem elég nagy, a program összeomlik.
Mi a különbség a mutatók és a tömbök között?
A mutató egy olyan adattípus, amely egy olyan memóriahely címét tárolja, ahol bizonyos adatok vannak tárolva, míg a tömbök a leggyakrabban használt adatszerkezetek egy elemgyűjtemény tárolására. A C programozási nyelvben a tömb indexelése mutató aritmetikával történik (azaz az x tömb i-edik eleme egyenértékű a (x+i)-vel). Ezért C-ben az egymás után következő memóriahelyek halmazára mutató mutatók halmaza tömbnek tekinthető. Továbbá különbség van abban, hogy a sizeof operátor hogyan működik mutatókon és tömbökön. Tömbre alkalmazva a sizeof operátor a tömb teljes méretét adja vissza, míg mutatóra alkalmazva csak a mutató méretét adja vissza.