Pointer vs Array
En pekare är en datatyp som innehåller en referens till en minnesplats (dvs. en pekarvariabel lagrar en adress till en minnesplats där viss data lagras). Matriser är den vanligaste datastrukturen för att lagra en samling element. De flesta programmeringsspråk tillhandahåller metoder för att enkelt deklarera arrayer och komma åt element i arrayerna.
Vad är en pekare?
En pekare är en datatyp som lagrar en adress till en minnesplats där vissa data är lagrade. Med andra ord, en pekare innehåller en referens till en minnesplats. Att komma åt data som är lagrade på minnesplatsen som refereras till av pekaren kallas dereferencing. När du utför repetitiva operationer som att korsa träd/strängar, tabellsökningar, etc., skulle användning av pekare förbättra prestandan. Detta beror på att det är billigare att avläsa och kopiera pekare än att faktiskt kopiera och komma åt data som pekar på. En nollpekare är en pekare som inte pekar på någonting. I Java skulle tillgång till en nollpekare generera ett undantag som kallas NullPointerException.
Vad är en array?
Visas i figur 1, är en kodbit som vanligtvis används för att deklarera och tilldela värden till en array. Figur 2 visar hur en array skulle se ut i minnet.
int-värden[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
Figur 1: Kod för att deklarera och tilldela värden till en array
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Figur 2: Array lagrad i minnet
Koden ovan definierar en array som kan lagra 5 heltal och de nås med hjälp av index 0 till 4. En viktig egenskap hos en array är att hela arrayen allokeras som ett enda minnesblock och varje element får sitt eget utrymme i arrayen. När en array väl har definierats är dess storlek fast. Så om du inte är säker på storleken på arrayen vid kompilering, måste du definiera en tillräckligt stor array för att vara på den säkra sidan. Men för det mesta kommer vi faktiskt att använda mindre antal element än vi har allokerat. Så en ansenlig mängd minne går faktiskt till spillo. Å andra sidan, om "tillräckligt stor array" faktiskt inte är tillräckligt stor, skulle programmet krascha.
Vad är skillnaden mellan Pointers och Arrays?
En pekare är en datatyp som lagrar en adress till en minnesplats där viss data lagras, medan Arrays är den vanligaste datastrukturen för att lagra en samling element. I programmeringsspråket C görs arrayindexering med hjälp av pekaritmetik (dvs det i:te elementet i arrayen x skulle vara ekvivalent med (x+i)). Därför kan i C, uppsättning pekare som pekar på en uppsättning minnesplatser som är konsekutiva, ses som en matris. Vidare finns det en skillnad i hur storleken på operatören fungerar på pekare och arrayer. När den tillämpas på en array kommer sizeof-operatorn att returnera hela storleken på arrayen, medan den när den tillämpas på en pekare returnerar bara storleken på pekaren.