Indirection og Dereference

Tags:    c++

Igen pointers.

Hvad er forskellen på dereference og indirection?
(indirection-operatoren er: *)
Jeg er kommet frem til følgende:
1. Indirection bruges til at finde adressen som pointeren peger på.
2. Dereference bruges til at finde værdien som pointeren peger på.

hvad er forskellen på disse to linjer kode:
Fold kodeboks ind/udKode 


Hvordan skriver man at pointeren er dereferenced?
Er lidt forvirret.





Hej Henning,

Indirection : Erklærer pointeren
Dereference : Henter værdien på addressen

Fold kodeboks ind/udCSharp kode 


Igen pointerer jeg at det er en god ide at give pointere værdi, andre steder end der hvor de erklæres (Indirection), da det ellers er deres addresse som bliver povirket og ikke deres indhold (Dereference).

Med venlig hilsen
Ieet




Indlæg senest redigeret d. 14.08.2008 16:16 af Bruger #12836
Tak for svar. Nu forstår jeg forskellen, men jeg stødte ind i noget meget underligt:

Fold kodeboks ind/udKode 


Havde ændret den første "cout" til udskrive pointeren *pAge (som er initieret med &Age), men min compiler udskriver "54" og ikke selve variablens adresse i hexadecimal. Det burde den da, ikke???? Hvorfor gør den det??



Tak for svar. Nu forstår jeg forskellen, men jeg stødte ind i noget meget underligt:

Fold kodeboks ind/udKode 


Havde ændret den første "cout" til udskrive pointeren *pAge (som er initieret med &Age), men min compiler udskriver "54" og ikke selve variablens adresse i hexadecimal. Det burde den da, ikke???? Hvorfor gør den det??


Det er jo lige netop fordi du derefererer den. Havde du brugt:
Fold kodeboks ind/udKode 

...så ville den skrive adressen i stedet.



Indlæg senest redigeret d. 18.08.2008 15:31 af Bruger #2695
Det som forvirrer mig er denne sætning i begyndelsen af koden:

Fold kodeboks ind/udKode 


siger man ikke at *pAge peger på &Age som er adressen (i hexadecimal), derfor hvis man udskriver *pAge, som jeg havde gjort burde jeg få adressen og ikke værdien?
Hvordan kan den udskrive 54, når pointeren peger på variablens adresse?





Det som forvirrer mig er denne sætning i begyndelsen af koden:

Fold kodeboks ind/udKode 


siger man ikke at *pAge peger på &Age som er adressen (i hexadecimal), derfor hvis man udskriver *pAge, som jeg havde gjort burde jeg få adressen og ikke værdien?
Hvordan kan den udskrive 54, når pointeren peger på variablens adresse?



En adresse er en adresse. Ikke noget med hexadecimalt.

En variabel er et område i hukommelsen af en vis størrelse afhængig af variablens type.

int Age = 57;
Dette er en variabel af typen 'int'. En int fylder (afhængig af maskinen) 32 bits og indeholder et tal, i dette tilfælde 57.

int * pAge;
...er en pointer, altså en adresse i hukommelsen som indeholder en adresse. Den fylder (igen afhængig af maskinen) også 32 bits.
pAge = &Age;

Her lægges Age variablens adresse over i pAge.

De to variable ligger to forskellige steder i hukommelsen.
Vil du skrive indholdet af en variabel ud, gør du følgende:

cout << Age;
Her skrives indholdet af Age variablen, som er tallet 57.
cout << pAge;
Her skrives indholdet af pAge variablen, som er en adresse.
cout << *pAge;
Her skrives det, som pAge peger på, som er Age adressen, som indeholder tallet 57.

Pointere tager lidt tid at forstå. Se evt "Pointer fun with Binky", som er en forklaring af pointer begrebet med en frygteligt grim ler mand: http://www.youtube.com/watch?v=6pmWojisM_E
Ganske underholdende.



t