? En af de funktioner , der gør C sådan et kraftfuldt programmeringssprog er evnen for programmører at få adgang til hukommelse direkte ved hjælp pointere. Pointers er udbredt i C til håndtering datamatrixer , manipulere tekststrenge , videregive 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 i C-sprog . Forstå og bruge pejlemærker er afgørende for en effektiv C programmering .
Pointer pointer : Pas til at rydde op !
Function
Et objekt pointer , eller blot pointer er en variabel, der indeholder en hukommelse adresse, hvor en genstand , såsom en struct eller flyder , eller et array af objekter , er gemt. Med denne hukommelse adresse, kan programmøren læse, ændre og flytte gennem hukommelsen ved hjælp af en pegepind .
Fordele
Funktioner, der tager en pointer til en ekstern objekt passerede ind som en parameter kan ændre det pågældende objekt. Når funktionen afslutter , vil den nye værdi tildelt til objektet fortsætter. En funktion kan tage flere pegepinde , så en enkelt funktion at modificere flere objekter med en enkelt funktion opkald.
En markør kan anvendes til at navigere gennem en række elementer systematisk eller tilfældig bruger 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 forebygge fejl , der er yderligere overliggende , der påvirker ydeevnen.
Betydning
evnen til dynamisk tildele vilkårlige mængder bunke hukommelse under runtime er en teknik kaldet "dynamisk allokering af hukommelse . " Mange tidligere sprog, såsom Fortran , krævede mængde hukommelse tildelt for strukturer såsom arrays , der skal fastsættes påkompileringstidspunktet , og mængden af allokeret hukommelse kunne ikke ændres under kørslen af programmet. Pointers bruges i C for at holde adressen på dynamisk tildelte hukommelse.
Brug
pointer erklæres ved at placere en stjerne ( * ) mellem typen navn og variabelnavn.
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 (*) foran markøren navnet
Ved håndtering pointere til structs er medlem af struct refereres ved hjælp af en pil (-> ) mellem markøren navn og medlemmet navn.
adressen af et objekt kan tilgås ved at placere et og-tegn (& ), før objektets variabelnavnet. Passing et objekts adresse til en funktion kaldes "pass ved henvisning . " Parameteren er erklæret som en pegepind i funktionen prototype. Funktionsmodulerne dereferences parameteren til at ændre dens værdi, og værdien vil fortsætte , når funktionen udgange.
Arrays er skabt ved at tildele den mængde hukommelse, der kræves for at holde det ø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 efter matrix notation. Elementer i et array kan tilgås ved hjælp indeksreferenceperiode notation eller ved iteration array pointer. Iteration automatisk øges eller reduceres adresse ved størrelsen af en enkelt element , så markøren er placeret korrekt i begyndelsen af den næste eller forrige element .
Warning
Hukommelse allokering og deallokering ledes af programmøren . Hukommelse, der har fået tildelt , skal deallokeret når det ikke længere er nødvendig . Undlade at deallocate hukommelse forhindrer den i at blive brugt , indtil ansøgningen udgange. A " hukommelsesfejl " opstår, når en henvisning til tildelte 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 ejerskabet af den tildelte hukommelse.
Adgang hukommelse ud over enden af allokeret 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.