Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 1695
Hei.

Sliter virkelig med å forstå pekere. Eneste konseptet så langt innen programmering der jeg står fast. Har lest meg ihjel, sett videoer på youtube og gjort en haug med oppgaver. (Iallefall prøvd). Det er ikke mange linjene som skal til for å forklare pekere, allikevel, det sitter ikke.
Det funker ikke når jeg tror det skal funke, også funker det når jeg mener det ikke burde funke.

Noen tips? Eller noen som vet om en virkelig good tutorial?
Hadde kanskje vært greit å si hvilket (programmerings-) språk du bruker.
Gi oss et eller flere eksempel[er] på en kode snutt, som ikke fungerer slik du forestiller deg det. Så skal vi forklare deg hvordan det fungerer.
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. 15:39.