View Single Post
Pekere er bare en adresse til en minnelokasjon, og det er det eneste de er. I tillegg har du gjerne informasjon om hva slags type data det pekes på, men dette er ikke nødvendigvis sant i alle tilfeller. Pointere kan brukes i veldig mange sammenhenger, og du forklarer ikke hvilke sammenhenger du ikke forstår, og da er det vanskelig å gi et spesifikt svar.

De mest typiske er disse:
- Som referanse til en variabel i en funksjon, hvor du vil at funksjonen skal kunne endre den originale variabelen. Hvis du ikke bruker pointere her, så blir det bare sendt en kopi av tallet til funksjonen, og det originale tallet er uendret.

Kode

void AddOne(uint8_t * inputtall)
{
  *inputtall += 1;
}
uint8_t tall = 0;
AddOne(&tall); // Tall er nå 1
- For å representere arrays, spesielt da i C. ASCII-strenger er også 8-bits arrays i minnet, og for å lese ut strengen så trenger du bare en pointer til den første bokstaven, og så leser du til du ser en null-byte. Disse to linjene er ca. ekvivalente operasjoner. Både "array1" og "array2" er nå pekere til uint8_t-typer, og array1[0] vil peke på en den første bokstaven. Å bruke slike array-indexer, eller *-operatoren, derefererer pekeren, dvs. leser minnelokasjonen og forsøker å putte den inn i riktig type variabel.

Kode

uint8_t array1[] = {'F','O','O','\0'};
uint8_t * array2 = "FOO";
Ellers er det en god del triks man gjøre med casting, som ikke alltid er så enkle å forstå. Du kan bruke denne nettsiden for å forsøke å få mening ut av deklarasjoner som

Kode

int (*(*foo)(void ))[3]
Sist endret av Dyret; 19. januar 2018 kl. 14:39.