Hvad er en Pointer i C?

January 10

En af de funktioner, der gør et kraftfuldt programmeringssprog C, således er evnen for programmører at få adgang hukommelse direkte ved hjælp pointere. Pointers anvendes i udstrakt grad i C til håndtering arrays af data, manipulere tegnstrenge, passerer parametre til funktioner og skabe hægtede lister og andre komplekse datastrukturer. Pointers er en af ​​de største kilder til forvirring for programmører nye til C sproget. Forståelse og brug af henvisninger er afgørende for effektiv C programmering.

Pointer pointer: Vær omhyggelig med at rydde op!

Fungere

Et objekt pointer, eller blot pointer, er en variabel, der indeholder en hukommelse adresse, hvor en genstand, såsom en struct eller float, eller en gruppering af objekter, lagres. Med at hukommelsen adresse, kan programmøren læse, ændre og bevæge sig gennem hukommelsen ved hjælp af en pegepind.

Fordele

Funktioner, der tager en pointer til et eksternt objekt passerede ind som en parameter kan ændre det pågældende objekt. Når funktionen skubbes ud, vil den nye værdi er tildelt det pågældende objekt fortsætter. En funktion kan tage flere pegepinde, så en enkelt funktion til at modificere flere objekter med en enkelt funktion opkald.

En pegepind kan bruges til at navigere gennem en række elementer systematisk eller tilfældigt ved hjælp af matrix notation, iteration eller grundlæggende matematik. Brug pejlemærker for matrix-adgang er hurtigere end de mere komplicerede implementeringer af lignende funktionalitet findes i andre sprog. Selv om sådanne implementeringer er ofte lettere at bruge og forhindre fejl, er der ekstra hovedhøjde, der påvirker ydeevnen.

Betydning

Evnen til dynamisk allokere vilkårlige mængder af bunke hukommelse under runtime er en teknik kaldet "dynamisk allokering af hukommelse." Mange tidligere sprog, såsom Fortran, krævede den mængde hukommelse afsat til strukturer såsom arrays, der skal fastsættes påkompileringstidspunktet, og mængden af ​​hukommelse allokeret kunne ikke ændres under forløbet af programmet. Pointere anvendes i C til at holde adressen på dynamisk allokerede hukommelse.

Usage

En pointer er erklæret ved at placere en stjerne (*) mellem navnet type og variabelnavnet.

Værdien af ​​et objekt i hukommelsen på den adresse, som markøren er adgang til ved "dereferere" markøren. Dereferere en pointer gøres ved at sætte en stjerne (*) før markøren navn.

Ved håndtering pointere til Structs, er medlem af struct refereres ved hjælp af en pil (->) mellem markøren navn og medlem navn.

Adressen på et objekt kan tilgås ved at placere et og-tegn (&), før objektets variabelnavn. Passing et objekts adresse til en funktion kaldes "pass ved henvisning." Parameteren er erklæret som en pegepind i funktionen prototype. Funktionen dereferences parameteren til at ændre dens værdi, og værdien vil fortsætte, når funktionen kommer ud.

Arrays er skabt ved at tildele den mængde hukommelse, der kræves for at holde den ønskede antal objekter af en given type. Dette opnås under eller efter erklæring med pointer notation og malloc eller calloc eller under erklæring hjælp vifte notation. Elementer af en array kan tilgås ved hjælp indeks henvisning notation eller ved iteration array pointer. Iteration enten øges eller reduceres adressen af ​​størrelsen af ​​et enkelt element, så markøren er placeret korrekt i begyndelsen af ​​den næste eller forrige element automatisk.

Advarsel

allokering Hukommelse og deallokering ledes af programmøren. Hukommelse, der er blevet tildelt, skal deallokeret når det ikke længere er nødvendig. Undlade at deallocate hukommelse forhindrer den i at blive brugt indtil program afsluttes. Et "memory lække" opstår, når en henvisning til allokeret hukommelse er tabt uden at frigøre hukommelsen først. Memory leaks kan ske, når en pointer er genindtrådt, eller en funktion afslutter uden at uddelegere ejerskab af den tildelte hukommelse.

Adgang hukommelse ud over enden af ​​tildelte hukommelse er en almindelig fejl, når du arbejder med arrays. Denne fejl kaldes at have en "arrayindeks out of bounds." Dette kan få programmet til at opføre sig forkert eller afslutte uventet.


relaterede artikler