? En av funksjonene som gjør C slik kraftig programmeringsspråk er muligheten for programmerere å få tilgang til minnet direkte ved hjelp av pekere . Pekere brukes mye i C for håndtering av matriser av data , manipulere tegnstrenger , sende parametere til funksjoner og skape lenkede lister og andre komplekse datastrukturer . Pekere er en av de største kildene til forvirring for programmerere nye til C-språk . Forstå og bruke pekere er kritisk til effektiv C-programmering .
Pointer spisser: Vær nøye med å rydde opp !
Funksjon
Et objekt pekeren, eller bare peker, er en variabel som inneholder et minne adresse hvor et objekt , for eksempel en struct eller flyte , eller en rekke objekter , er lagret. Med det minne adresse, kan programmereren lese, endre og flytte gjennom minnet ved hjelp av en peker .
Fordeler
Funksjoner som tar en peker til en ekstern objekt passert inn som en parameter kan endre dette objektet . Når funksjonen kommer ut , vil den nye verdien tilordnet til dette objektet vedvarer . En funksjon kan ta flere pekere , slik at en enkelt funksjon for å endre flere objekter med en enkelt funksjon samtale.
En peker kan brukes til å navigere gjennom en rekke elementer systematisk eller tilfeldig bruker matrise notasjon , gjentakelse eller grunnleggende matematikk . Ved hjelp av pekere for matrise -tilgang er raskere enn de mer kompliserte implementeringer av tilsvarende funksjonalitet som finnes i andre språk . Mens slike implementeringer er ofte enklere å bruke og forhindre feil , er det ekstra overhead som påvirker ytelsen .
Betydning
Muligheten til å dynamisk allokere vilkårlige mengder heap minne under runtime er en teknikk som kalles " dynamisk minne allokering . " Mange tidligere språk, for eksempel Fortran , kreves mengden minne som er tildelt for strukturer som arrays for å bli satt på kompilering , og hvor mye minne som er tildelt kan ikke endres under kjøring av programmet . Pekere brukes i C for å holde adressen dynamisk allokert minne .
Usage
En peker er deklarert ved å plassere en stjerne (* ) mellom den type navn og variabelnavn.
verdien av et objekt i minnet på adressen holdt av pekeren nås med " dereferencing " pekeren. . Dereferencing en peker gjøres ved å sette en stjerne ( * ) før pekeren navn
Ved håndtering av pekere til structs , er medlem av struct referert ved hjelp av en pil ( - > ) mellom pekeren navn og medlemmet navn.
adressen til et objekt kan nås ved å plassere en ampersand ( &) før objektets variabelnavn. Passerer et objekt adresse til en funksjon som kalles "pass som referanse. " Parameteren er erklært som en peker i funksjonen prototype. Funksjonstastene dereferences parameteren til å endre sin verdi, og verdien vil vedvare når funksjonen utganger.
Arrays er skapt ved å allokere mye minne som kreves for å holde ønsket antall objekter av en gitt type. Dette gjøres under eller etter deklarasjon med pekeren notasjon og malloc eller calloc , eller under erklæringen hjelp matrise notasjon . Elementer av en matrise kan nås ved hjelp index referansen notasjon eller ved iterating matrisen pekeren . Iterasjon automatisk økning eller svekkelser adressen ved størrelsen på en enkelt element , slik at pekeren er plassert riktig i begynnelsen av neste eller forrige element .
Warning
Minne tildeling og deallocation ledes av programmereren. Minne som har blitt tildelt må deallocated når det ikke lenger er nødvendig . Sviktende å deallocate minne hindrer den fra å bli brukt til programmet avslutter . A " minnelekkasje " oppstår når en referanse til tildelte minnet er tapt uten frigjøre minnet først. Minnelekkasjer kan skje når en peker tilordnes på nytt , eller en funksjon avslutter uten å delegere eierskap til tildelte minnet .
Tilgang minne utover slutten av allokert minne er en vanlig feil når du arbeider med matriser . Denne feilen kalles å ha en "array index utenfor banen . " Dette kan føre til at programmet oppfører seg feil eller avslutte uventet .