? En av de funktioner som gör C sådant kraftfullt programmeringsspråk är möjligheten för programmerare att komma åt minnet direkt med pekare . Pekare används mycket i C för hantering datamatriser , manipulera teckensträngar , skicka parametrar till funktioner och skapar länkade listor och andra komplexa datastrukturer . Pekare är en av de största källorna till förvirring för programmerare nya till C-språket . Förstå och använda pekare är avgörande för effektiv C-programmering .
Pointer pekare : Var noga med att städa upp !
Funktion
Ett objekt pekare , eller helt enkelt pekaren , är en variabel som innehåller en minnesadress där ett föremål , såsom en struct eller float , eller en array med objekt , är lagras. Med denna minnesadress , kan programmeraren läsa , modifiera och flytta genom minnet med hjälp av en pekare .
Fördelar
Funktioner som tar en pekare till en extern objektet skickas som en parameter kan ändra det objektet . När funktionen avslutas , kommer det nya värdet som tilldelats objektet kvarstår . En funktion kan ta flera pekare , så att en enda funktion att modifiera flera objekt med en enda funktionsanrop .
En pekare kan användas för att navigera genom en rad element systematiskt eller slumpmässigt använda array notation , iteration eller grundläggande matematik . Använda tips för arrayåtkomst är snabbare än de mer komplicerade implementeringar av liknande funktioner som finns i andra språk . Medan sådana implementeringar är ofta lättare att använda och förhindra fel , det finns ytterligare omkostnader som påverkar prestandan .
Betydelse
Möjligheten att dynamiskt allokera godtyckliga mängder heap minne under runtime är en teknik som kallas " dynamisk minnesallokering . " Många äldre språk, såsom Fortran , krävs det mycket minne allokeras för strukturer såsom arrayer som ska fastställas vid kompileringen , och mängden tilldelade minnet kunde inte ändras under programmets gång . Pekare används i C för att hålla adressen dynamiskt allokerat minne .
Användning
En pekare förklaras genom att placera en stjärna ( * ) mellan typ namn och variabelnamn.
värdet av ett objekt i minnet på den adress som innehas av pekaren nås genom " dereferencing " pekaren. . Dereferencing en pekare görs genom att sätta en stjärna ( * ) före pekaren namn Vid hantering av pekare till struct
, är en medlem av struct refereras med en pil ( - > ) mellan pekaren namn och medlemmen namnet .
adress för ett objekt kan nås genom att placera ett et-tecken ( & ) före objektets variabelnamn . Passerar ett objekts adress till en funktion som kallas " passera genom hänvisning . " Parametern deklareras som en pekare i funktionsprototyp . Funktionsblocken dereferences parametern att modifiera dess värde , och värdet kommer att bestå när funktionen avslutas .
Matriser skapas genom att allokera mängden minne som krävs för att hålla det önskade antalet objekt av en viss typ . Detta sker under eller efter deklaration med pekaren notation och malloc eller calloc , eller under deklarationen med array notation . Element i en array kan nås med hjälp av notation indexreferensperiod eller genom iteration arrayen pekaren . Iteration automatiskt ökar eller minskar adress med storleken på ett enskilt element så att pekaren är rätt placerad i början av nästa eller föregående element .
Varning
Minne allokering och avallokering hanteras av programmeraren . Minne som har tilldelats måste avallokeras när det inte längre behövs . Misslyckas att deallocate minnet hindrar det från att användas tills programmet avslutas . En " minnesläcka " uppstår när en hänvisning till det allokerade minnet försvinner utan att frigöra minnet först . Minnesläckor kan hända när en pekare överlåts , eller en exits funktion utan att delegera ägandet av det tilldelade minnet .
Åtkomst minne efter utgången av tilldelade minne är ett vanligt fel när du arbetar med arrayer . Detta fel kallas för att ha en " array index out of bounds . " Detta kan få programmet att bete sig felaktigt eller avsluta oväntat .