Pointer (programmeerconcept): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
RedBot (overleg | bijdragen)
kGeen bewerkingssamenvatting
Regel 5:
 
== Beschikbaarheid in programmeertalen ==
Veel traditionele [[programmeertaal|programmeertalen]] als bijvoorbeeld [[programmeertaal C (programmeertaal)|C]] hebben uitgebreide mogelijkheden om met pointers te werken. Dit levert grote flexibiliteit op (bijvoorbeeld in vergelijking met een taal als [[programmeertaal Fortran|Fortran 77]] dat slechts zeer beperkte pointers kent), maar ook maakt het werken met pointers en berekeningen aan pointers in dergelijke programmeertalen het vaak erg moeilijk om foutloze programma's te schrijven die er correct voor zorgen dat ze de geheugenplaatsen op de juiste manier reserveren en vrijgeven. Omdat een pointer naar een geheugenadres wijst kan hij ook, door onvoorzichtig of foutief programmeren, naar een verkeerd geheugenadres gaan wijzen waar het programma niets te zoeken heeft en zo andere gegevens van het programma wijzigen of (indien daartegen geen bescherming is) gegevens van andere programma's of zelfs het draaiende operating system beschadigen waardoor het hele systeem herstart moet worden. Dergelijke [[Bug (technologie)|bugs]] zijn vaak lastig op te sporen.
 
Veel traditionele [[programmeertaal|programmeertalen]] als bijvoorbeeld [[programmeertaal C|C]] hebben uitgebreide mogelijkheden om met pointers te werken. Dit levert grote flexibiliteit op (bijvoorbeeld in vergelijking met een taal als [[programmeertaal Fortran|Fortran 77]] dat slechts zeer beperkte pointers kent), maar ook maakt het werken met pointers en berekeningen aan pointers in dergelijke programmeertalen het vaak erg moeilijk om foutloze programma's te schrijven die er correct voor zorgen dat ze de geheugenplaatsen op de juiste manier reserveren en vrijgeven. Omdat een pointer naar een geheugenadres wijst kan hij ook, door onvoorzichtig of foutief programmeren, naar een verkeerd geheugenadres gaan wijzen waar het programma niets te zoeken heeft en zo andere gegevens van het programma wijzigen of (indien daartegen geen bescherming is) gegevens van andere programma's of zelfs het draaiende operating system beschadigen waardoor het hele systeem herstart moet worden. Dergelijke [[Bug (technologie)|bugs]] zijn vaak lastig op te sporen.
 
In modernere [[objectgeoriënteerd]]e [[scripttaal|scripttalen]] worden geen pointers meer op deze manier gebruikt. Intern worden nog wel pointers gebruikt, maar doordat ze voor de programmeur worden afgeschermd en de programmeertalen zelf voor het reserveren en vrijgeven van de nodige geheugenplaatsen zorgen, wordt het programmeren van ingewikkelde constructies fundamenteel eenvoudiger.
Regel 15 ⟶ 14:
 
== Handles ==
Het veelvuldig gebruik van [[dynamische geheugenallocatie]] kan resulteren in fragmentatie van het gebruikte geheugen. Het is heel moeilijk om dat probleem op te lossen. Een systeem dat door [[Apple ComputerInc.|Apple]] ooit op de originele [[Apple Macintosh]] met [[68000 (processor)|68000]]-processor werd geïntroduceerd om fragmentatie van het geheugen op te lossen is het gebruik van ''handles'': pointers naar pointers. Als een programma alleen ''handles'' gebruikt, kan een bibliotheek worden gebruikt die automatisch het gebruikte geheugen naar behoeven defragmenteert.
 
== Referenties ==
 
In talen als [[Perl (programmeertaal)|Perl]] of [[Java (programmeertaal)|Java]] kan veel van de functionaliteit van pointers worden gebruikt door gebruik te maken van referenties (''references''). Men kan op een eenvoudige manier complexe datastructuren maken, door bijvoorbeeld een [[array]] te gebruiken die referenties bevat naar [[associatief array|associatieve arrays]] die op hun beurt referenties bevatten naar weer andere [[datastructuur|datastructuren]]. Hierbij hoeft de programmeur niet expliciet [[geheugenadres]]sen te gebruiken.