Pekere i C

Et kompakt eksempel som viser bruk av pekere i C:


#include <stdio.h>

int main() {

   // Variabler for dette kodeeksemplet
   int tall = 10; // int: størrelse lik 4 bytes på PC
   int tabell[3] = {11, 12, 13};

   // --------------------------------------------------------------------
   // EKSEMPLER PÅ BRUK AV PEKERE:
   // --------------------------------------------------------------------

   // DEKLARERING:
   int *peker1;
   int *peker2, *peker3; // to samtidig

   // INITIALISERING:
   peker1 = &tall; // peker til variabelen 'tall' (med verdi 10)
   peker2 = tabell; // peker til første elementet i 'tabell'
   peker2 = &tabell[0]; // samme resultat som over (alternativ måte)
   peker3 = &tabell[1]; // peker til andre elementet i 'tabell'
   peker3 = tabell+1; // samme resultat som over (alternativ måte)
   peker3 = tabell+2; // peker til tredje og siste elementet i 'tabell'

   // DEKLARERING OG INITIALISERING SAMTIDIG:
   int *peker4 = &tall; // peker til variabelen 'tall' (med verdi 10)
   int *peker5 = tabell; // peker til første elementet i 'tabell'

   // INKREMENTERING OG DEKREMENTERING:
   peker5++; // peker til andre elementet i 'tabell'
   peker5--; // peker til første elementet i 'tabell' igjen
   peker5 += 1; // samme resultat som øverst (alternativ måte)
   peker5 -= 1; // samme resultat som nestøverst (alternativ måte)

   // DIFFERANSE:
   int differanse =
   peker3 - peker5; // 2, fordi peker3 = siste element og peker5 = første element
   // printf("%d\n", differanse); // kontroll

   // SAMMENLIGNING:
   tabell == peker2; // 1 (sann), begge inneholder adressen til første element
   tabell == peker5; // 1 (sann), begge inneholder adressen til første element
   peker3 == peker5; // 0 (usann), adressen til element 3 er ikke lik element 1
   tabell == &tabell[0]; // 1 (sann), begge har samme adresse
   &peker1 == &tall; // 0 (usann), pekerens adresse er ikke lik adressen til 'tall' 
   // printf("%d %d %d %d %d\n", tabell == peker2, tabell == peker5, peker3 == peker5, tabell == &tabell[0], &peker1 == &tall); // kontroll

   // INDIREKSJON (AVLESING):
   *peker1; // 10
   *peker2; // 11
   *peker3; // 13
   *peker4; // 10
   *peker5; // 11
   *(tabell+1); // 12
   *(tabell+2); // 13
   // printf("%d %d %d %d %d %d %d\n", *peker1, *peker2, *peker3, *peker4,  *peker5, *(tabell+1), *(tabell+2)); // kontroll

   return 0;
}

TBC

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *