Gå til innhold

Anbefalte innlegg

Hey!

 

int var =1, *pkr = &var;

 

integer variablen var er 1, *pkr peker på var og &var peker på minneomerådet til var eller noe sånt.

 

Noen som kunne forklart meg litt mer forskjellen på: var, *pkr, &var og når de forskjellige faktisk trengs/må brukes? Hva er liksom "bruksomerådet" til de?

 

Fremdeles litt forvirra, jeg.

 

if(erJegForvirra()){

leggInnEmne();

stikkAaKjoepEnIs("snickersIs");

}//if

Lenke til kommentar
Videoannonse
Annonse

La oss se.... Forbehold om at dette er skrevet litt for tidlig på morgenen:!:

 

int i = 1;

refererer du nå til i så refererer du til verdien 1(dvs. "innholdet" av i). Refererer du til &i så er det addressen til i i minnet du refererer til. Leser en de 32( eller 16) neste bitsene fra lokasjonen &i i minnet så har en "innholdet" av i.

int *i;

er en deklerasjon av en peker. Dvs i "inneholder" kun en minneadresse. i peker til et sted i minnet hvor det skal være allokert 32(eller 16) bits minne som kan tolkes som en int. For at en ikke skal få den lite hyggelige "segmentation fault" er det viktig å passe på at pekere alltid perer til allokert minne når en aksesserer dem. Husk at deklarasjonen 'int *i;' _ikke_ setter av plass i minne til selve dataen!! En kan enten allokere minne selv

i = malloc(sizeof(int));

da må en også huske å frigjøre dette minnet når en ikke lengre har bruk for det(ikke lengre skal ha noen referanser til det) - ellers ender du opp med en minnelekasje. Frigjøring gjøres ved free(3).

Ellers kan en sette en peker til å peke til allerede allokert minne:

int tall;

int *i = &tall;

Nå peker altså i til lokasjonen i minnet som er satt av til "tall".

 

En bruker ofte pekere som funksjonsparametre. Dette er både for at funksjonene skal være mere robuste(reentrant og threadsafe) og for at minnehåndteringen skal bli "bedre". Dvs. en kaller må selv allokere minne som en funksjon skal legge "svaret" i. Men nå gidder jeg ikke skrive mere ;)

 

Håper du ble litt klokere av dette....

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...