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.