Aanwijzer versus matrix
Een aanwijzer is een gegevenstype dat een verwijzing naar een geheugenlocatie bevat (d.w.z. een aanwijzervariabele slaat een adres op van een geheugenlocatie waarin bepaalde gegevens zijn opgeslagen). Arrays zijn de meest gebruikte gegevensstructuur om een verzameling elementen op te slaan. De meeste programmeertalen bieden methoden om eenvoudig arrays te declareren en toegang te krijgen tot elementen in de arrays.
Wat is een aanwijzer?
Een aanwijzer is een gegevenstype dat een adres opslaat van een geheugenlocatie waarin bepaalde gegevens zijn opgeslagen. Met andere woorden, een aanwijzer bevat een verwijzing naar een geheugenlocatie. Toegang krijgen tot de gegevens die zijn opgeslagen op de geheugenlocatie waarnaar door de aanwijzer wordt verwezen, wordt dereferentie genoemd. Bij het uitvoeren van repetitieve bewerkingen zoals het doorkruisen van bomen/strings, het opzoeken van tabellen, enz., zou het gebruik van aanwijzers de prestaties verbeteren. Dit komt omdat het dereferentie en het kopiëren van pointers goedkoper is dan het daadwerkelijk kopiëren en openen van de gegevens waarnaar door de pointers wordt verwezen. Een null pointer is een pointer die nergens naar verwijst. In Java zou toegang tot een null-pointer een uitzondering genereren die een NullPointerException wordt genoemd.
Wat is een array?
Getoond in figuur 1 is een stukje code dat doorgaans wordt gebruikt om waarden te declareren en toe te wijzen aan een array. Afbeelding 2 laat zien hoe een array eruit zou zien in het geheugen.
int waarden[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
Figuur 1: Code voor het declareren en toewijzen van waarden aan een array
100 | 101 | 102 | 103 | 104 |
Index: 0 | 1 | 2 | 3 | 4 |
Figuur 2: Array opgeslagen in het geheugen
Bovenstaande code definieert een array die 5 gehele getallen kan opslaan en ze zijn toegankelijk met indices 0 tot 4. Een belangrijke eigenschap van een array is dat de hele array wordt toegewezen als een enkel geheugenblok en elk element krijgt zijn eigen ruimte in de array. Zodra een array is gedefinieerd, ligt de grootte vast. Dus als u niet zeker bent over de grootte van de array tijdens het compileren, moet u een array definiëren die groot genoeg is om aan de veilige kant te blijven. Maar meestal gaan we minder elementen gebruiken dan we hebben toegewezen. Er wordt dus een aanzienlijke hoeveelheid geheugen verspild. Aan de andere kant, als de "matrix groot genoeg" niet echt groot genoeg is, zou het programma crashen.
Wat is het verschil tussen Pointers en Arrays?
Een pointer is een gegevenstype dat een adres opslaat van een geheugenlocatie waarin sommige gegevens zijn opgeslagen, terwijl arrays de meest gebruikte gegevensstructuur zijn om een verzameling elementen op te slaan. In de programmeertaal C wordt array-indexering gedaan met behulp van pointer-rekenkunde (d.w.z. het i-de element van de array x zou gelijk zijn aan (x+i)). Daarom kan in C een reeks aanwijzers die verwijzen naar een reeks geheugenlocaties die opeenvolgend zijn, worden beschouwd als een array. Verder is er een verschil in hoe de operator sizeof werkt op pointers en arrays. Wanneer toegepast op een array, retourneert sizeof-operator de volledige grootte van de array, terwijl wanneer toegepast op een aanwijzer, het alleen de grootte van de aanwijzer zou retourneren.