Wku

Hvordan lage pekere i C

Pekere er mareritt av hver nye C programmerer. Men de er også funksjonen som gjorde C utbredt, kraftig programmeringsspråk er det fram til i dag. Som mange andre programmeringsspråk funksjoner og konstruksjoner, det er en systematisk tilnærming for å skape og bruke C pekere. Denne artikkelen er en steg-for-steg guide til å skape og bruke pekere i en klar og enkel måte.

Forutsetning informasjon

  • Pekere er variabler som holder adressen til et minneområde generelt (dette minneområde kan holde dataene variabel eller bli tilordnet ennå).
  • Referanser er variabler som holder minnet adressen til en annen variabel.
  • Den største forskjellen mellom en referanse og en peker er at referansene peker til tildelte minneplasser mens pekere kan peke til ufordelte minneplasser.
  • Det er en forskjell mellom adressen operator (brukes på variabler å returnere deres adresse i minnet), referansen erklæringen operatør (brukes i en referanse erklæring for å indikere at den deklarerte variabelen er en referanse) og bitvis "og" operatør, alle har samme symbol (&)
  • Pekere kan økes og minskes (slik at du kan endre plasseringen der den peker).
  • Pekere kan tildeles ved hjelp av en av følgende metoder:
    • Tildele en referanse til pekeren gjør pekeren peker til samme sted i minnet som referanse.
    • Tilordning av en hvilken som helst annen pekeren av samme type for å gjøre pekeren begge pekere peker til samme sted.
    • Tilordne et tall verdi til pekeren (i heksadesimalt format) gjør pekeren peker til bestemt minneområde løses ved at tall.
    • Adressetilordningen av en variabel av pekeren er typen til pekeren gjør pekeren peker på minneområdet for den første byte av variabelens binær representasjon i minnet.
  • Referanser kan tildeles ved hjelp av en av følgende metoder:
    • Tildele en annen referanse til referanse.
    • Tildeling av en variabel av den samme type som den referanse vil gjøre referansepunktet til variabelen.
  • Pekere og referanser har datatyper, som viser hvilken type data påpekt av pekeren / referanse.
  • Typen en referanse begrenser tildeling av som refererer til variabler / referanser av samme datatype. For eksempel, hvis vi erklære et heltall referansen (int & d;), kan vi bare tildele hvilken som helst annen heltall referanse eller en heltallsvariabel til at referansen (int i = 0; d = i;)
  • Typen en peker begrenser tildeling av pekeren til referanser, adresser til variabler / pekere av den samme datatype. Det påvirker også den gjenfinning av data pekt på et heltall slik at pekeren vil hente et antall byte som er lik antall byte som er tatt opp av et helt tall i systemet. Dessuten påvirker valget av datatype måten pekere økes og minskes. Når en peker økes, peker det til neste datatypeverdi fra nåværende posisjon. For eksempel, hvis en heltallsverdi tar 4 byte i minnet, å inkrementere et heltall peker, vil gjøre det punkt til det neste heltall, som er 4 byte etter den nåværende posisjon og så verdien av pekeren i seg selv øker med multipler av fire.
  • Array variabelnavn anses statiske / konstant pekere peker til første byte av det første elementet i matrisen og ha samme type som tabellmedlemmene elementer.

Trinn

Hvordan lage pekere i C. Bestemme hvilken type pekeren (det vil si den type data pekeren vil peke til).
Hvordan lage pekere i C. Bestemme hvilken type pekeren (det vil si den type data pekeren vil peke til).
  1. 1
    Bestemme hvilken type pekeren (det vil si den type data pekeren vil peke til). Følgende tips kan hjelpe:
    • Hvis du er erklære en dynamisk array, bruke matrisen elementer 'datatype.
    • Hvis du erklære pekeren å få tilgang til data i en variabel, kan du bruke samme datatype som variabel.
    • Hvis du erklære pekeren for å krysse en liste struktur, bruke listen node datatype (vanligvis en bruker opprettet).
    • Hvis du erklære pekeren til traversere et tre, bruker data type treet node, eller en peker til treet node type som den type (pekeren til en peker på tre node type!).
  2. 2
    Erklærer pekeren med en syntaks som dette: * pekeren-identifikator; der
    • er den typen du valgte i trinn 1.
    • pekeren-identifikator er identifikatoren eller navnet på pekeren variabel
  3. 3
    Tildele pekeren til en innledende minneområde. Dette kan gjøres ved hjelp av en av følgende metoder:
    1. Tildele minne og peker til den av pekeren: * i = (() * n), der n er antall minneblokker å tildele.
    2. Adressetilordningen av en variabel til pekeren: * i = & x, hvor "x" er et heltall og (&) betyr adresse-of.
    3. Tildele en rekke identifikator til pekeren: int * i = matrise1; hvor matrise1 er et heltall array ([] matrise1;).
    4. Tildele en referanse til pekeren: * i = en, hvor "a" er et heltall referansen (& a;).
    5. Tildele en annen peker til pekeren: * i = z, der "z" er et annet heltall pekeren (* z;)
  4. 4
    Når du trenger å trekke ut data elementet som er påpekt av pekeren, bruker du verdien-at-adresse operatør (*): x = * jeg, der jeg er et heltall pekeren.
  5. 5
    Bruk indekseringsoperatoren på pekeren som om det var en rekke når du ønsker å få en minneplass ved siden av pekeren uten egentlig å fremme pekeren. For eksempel, hvis du har et heltall peker i, kan du bruke i [2] som vil hente heltall som er etter heltall umiddelbart etter heltall påpekt av referansen (heltallet som er to heltall etter hvor du er). Pekeren jeg vil fortsatt peke til samme minneområde. Et annet alternativ til dette er å få verdien på pekeren to skritt etter denne pekeren: * (i + 2)
  6. 6
    Bruk tilvekst (+ +), minsk (-), + = og - = operatører når du trenger å endre gjeldende plassering. i + = 5; vil fremme heltall pekeren i. fem heltall fremover.
  7. 7
    Når du er ferdig med pekeren, hvis du tildelte minnet til at pekeren, må du frigjøre allokert minne ved hjelp av gratis ()-funksjonen. (Gratis (i), hvor jeg er en peker)

Tips

  • Når du deklarerer en peker som medlem av en, får du tilgang pekeren seg selv ved hjelp av punktum (.) Operatør, og du får tilgang til verdien peker til pekeren med (*) operatør. For eksempel, hvis du har en s1 som har et heltall pekeren medlem c, og du erklært en variabel s (struct s1 s;), sc vil få tilgang pekeren selv (sc = & i), vil * sc tilgang til dataene peker til medlemmet c (j = * fm).
  • Hvis du har en struktur som du har tildelt bruker malloc (), som returnerer en peker til strukturen, er referanser til medlemmer av den tildelte struktur laget ved hjelp av operatøren. Forutsatt strukturen igjen, og s har blitt erklært som en peker til at strukturen typen, vil følgende tildele adressen til en variabel og referere variabelen henholdsvis: s-> c = &j; k = * s-> c. Noen programmerere velger å skrive * (r-> c) for klarhet, selv om det ikke er nødvendig.
  • Det er vanligvis best å holde en peker som peker til noe minne du fordele slik at du kan frigjøre det senere.
  • Det er en god programmering praksis å sjekke om () lyktes i å fordele riktig minnetype blings ved å sjekke om det returnerte pekeren er ikke lik NULL eller 0.
  • Se inn i Boehm garbage collector. Når den er installert, kan du bruke den ved å inkludere gc.h og erstatte malloc () med gc_malloc (). Ved hjelp av en garbage collector reduserer minne bugs, men avhengig av programmet kan øke eller redusere ytelsen.
  • Vurder å bruke debugging verktøy som (Linux) som kan bidra til å identifisere minnelekkasjer, og for å spore bruk av pekere til "out of bounds" data.

Advarsler

  • Ikke glem å frigjøre noe minne du tildelt ved hjelp av (). Å ikke gjøre dette kan resultere i krasj, minne overløp og andre problemer i programmet.
  • Bruke indeksering operatør på pekere kan være farlig som du kan prøve å få tilgang til steder i minnet som ikke er tillatt eller får ufordelte minneområde verdier.
  • Ikke tilordne en direkte minneplass (etter adresse) til en peker med mindre du virkelig må.
  • Alltid starte tips før du bruker dem, som "ville" pekere peker på tilfeldige adresser, og tilgang til dem vil krasje programmet.