Zowel wijzers als verwijzingen zijn de krachtigste functies in C en C ++ waarmee programmeurs het geheugenadres rechtstreeks kunnen manipuleren voor efficiënt geheugenbeheer.
Beide zijn variabelen die indirect worden gebruikt om naar andere objecten te verwijzen en ze delen enkele algemene kenmerken op het oppervlak. Hoewel ze veel gemeenschappelijke mogelijkheden delen, zijn ze ook erg complex om te begrijpen.
Een pointer is een variabele die het geheugenadres van een andere variabele bevat, terwijl een verwijzing lijkt op een aanwijzer die kan worden gebruikt om indirect naar een andere variabele te verwijzen.
De meeste programmeurs lijken enig begrip te ontwikkelen over wanneer pointers moeten worden gebruikt en wanneer ze referenties moeten gebruiken, maar ze komen vaak problemen tegen waarvan de oplossing onduidelijk lijkt.
Dus om de filosofie beter te begrijpen, laten we het verschil tussen de twee begrijpen.
Elke variabele is een geheugenlocatie die wordt gedefinieerd door het adres en is gepaard met een ID die enige waarde bevat die tijdens een cursus kan worden gewijzigd. In eenvoudige termen is variabele een symbool dat een kwantiteit vertegenwoordigt.
Een pointer is een variabele die het geheugenadres van een andere variabele bevat. Een aanwijzer is niets anders dan een adres en een variabele die een aanwijzer opslaat, wordt een pointervariabele genoemd.
Het idee is om ID's (of namen) te gebruiken in plaats van numerieke adressen om de last van het programmeren te verminderen, waardoor de complexiteit van programma's wordt verminderd. Aangezien deze adressen verwijzen naar werkelijke locaties in het computergeheugen, kunnen aanwijzers worden gebruikt voor toegang tot en manipulatie van inhoud die is opgeslagen in het geheugen.
Zoals elke variabele of constante, moeten aanwijzers worden aangegeven voor hun typen. Omdat aanwijzers geheugenadressen bevatten die tot een ander gegevenstype behoren, moeten ze worden gedeclareerd met behulp van aanwijzers voordat u ermee kunt werken. De algemene vorm van een pointerverklaring is:
Data_type * var-naam;
Hier is 'Data_type' het basistype van de aanwijzer en 'var-name' de pointervariabele. De asterisk (*) hier wordt gebruikt om de wijzer aan te duiden die de variabele "var-naam" als een pointervariabele aanduidt.
int * p; // integer pointer
zweven * x; // zweefwijzer
Hier verwijst de variabele "p" naar een integer gegevenstype dat wordt gedeclareerd als "int", wat verwijst naar het gegevenstype van de variabele. Evenzo verwijst "float" in het tweede voorbeeld naar het gegevenstype van de variabele "x", dat in feite wordt aangeduid als een aanwijzer naar een variabele met drijvende komma.
Een verwijzing is als een aanwijzer met indirecte toegang tot een variabele. Het is als een alias voor een andere variabele, wat betekent dat het gewoon een andere naam is voor een al bestaande variabele.
Hiermee kunnen programmeurs een tweede naam maken voor de variabele die ze kunnen gebruiken om de inhoud te manipuleren die in die variabele is opgeslagen. Het is een entiteit die een alias is voor een andere variabele en deze heeft hetzelfde adres als de oorspronkelijke variabele. Het ondersteunt pass-by-referentie die fungeert als formele functieparameters en als het eenmaal is gedefinieerd om naar een variabele te verwijzen, kan het niet opnieuw worden ingevuld, wat betekent dat het niet naar een andere variabele kan worden verwezen.
In tegenstelling tot pointers hebben ze geen dereferentie-operator nodig om toegang te krijgen tot de waarde; in feite kunnen ze worden gebruikt als normale variabelen.
int i;
int & ri = i;
Hier is "ri" een integer referentie die is geïnitialiseerd naar "i". Het verklaart "ri" als een object van het type "verwijzing naar int". Een verwijzing kan eenvoudig worden verward met een aanwijzer die een onafhankelijke variabele is waarvan de adreswaarden niet opnieuw kunnen worden toegewezen nadat ze zijn gemaakt.
- Beide bieden bijna vergelijkbare mogelijkheden op het gebied van bruikbaarheid en het onderscheid kan lastig zijn. Een pointer is slechts een variabele die het geheugenadres van een andere variabele opslaat, terwijl een verwijzing als een alias voor een reeds bestaande variabele is. Het maakt een tweede naam aan voor een variabele die kan worden gebruikt om de inhoud die in die variabele is opgeslagen te wijzigen.
- Een pointer is als elke andere variabele die een stuk gegevens opslaat. In tegenstelling tot andere variabelen, slaan pointervariabelen geheugenadressen op in plaats van waarden. Een aanwijzer wordt dereferentie met behulp van de indirection-operator * om toegang te krijgen tot de geheugenlocatie van de variabele waarnaar het verwijst. Een verwijzing daarentegen heeft geen dereferencing-operator nodig om toegang te krijgen tot de waarde.
- In tegenstelling tot pointers die op elk moment kunnen worden geïnitialiseerd, moeten verwijzingen worden toegewezen bij initialisatie. Aanwijzers kunnen rechtstreeks worden geopend, terwijl verwijzingen niet rechtstreeks toegankelijk zijn.
- Een pointervariabele heeft zijn eigen locatie in het geheugen, wat betekent dat wanneer u een aanwijzer declareert, u een locatie opgeeft die een geheugenadres is toegewezen aan elke eenheid geheugen. De pointer-variabele heeft hetzelfde adres waar het in het geheugen is opgeslagen. Een referentievariabele daarentegen is een alias voor een andere variabele waarmee het adres van de referentievariabele wordt ingenomen.
- NULL staat voor het einde van de lijst. Dit betekent dat de waarde onbekend is en wordt aangegeven dat de variabele geen geldige adresruimte heeft. NULL-waarde kan direct worden toegewezen aan een pointervariabele, wat suggereert dat deze nergens ergens naartoe wijst, terwijl NULL niet kan worden toegewezen aan een referentievariabele.
Pointers zijn altijd al een van de favoriete gespreksthema's geweest van C / C ++ -programmeurs totdat er verwijzingen naar de foto kwamen. Referenties lijken enigszins op pointers, maar hebben in vergelijking een groot aantal voor- en nadelen. Hoewel beide kunnen worden gebruikt om lokale variabelen van een functie binnen een andere functie te wijzigen, hebben ze hun verschillen. Beide zijn krachtige functies in C en C ++ waarmee u het geheugen direct kunt bewerken, maar met een paar uitzonderingen. Een pointer bevat het geheugenadres van een variabele, terwijl een verwijzing slechts een alias is voor een andere variabele.