Avatar billede narrr Nybegynder
07. maj 2004 - 20:43 Der er 10 kommentarer og
1 løsning

Kode ang. pointere jeg ikke forstår

Hejsa. Jeg fandt følgende kodestump i MFC:
---
UINT AFXAPI HashKey(LPCWSTR key) // Unicode strings
{
    UINT nHash = 0;
    while (*key)
        nHash = (nHash<<5) + nHash + *key++;
    return nHash;
}
---

Nogen der kan fortælle mig hvad *key++ gør? Mit bud ville være at at den lægger 1 til det første element i arrayet key, men det burde da ikke være muligt når key er const.

Og nu jeg er i gang, hvorfor lægger de så nHash til, når den er 0?
Avatar billede arne_v Ekspert
07. maj 2004 - 20:46 #1
Den tager det som key peger på og ligger så 1 til key (så den peger på noget andet i næste gennemløb),

nHash er kun 0 i første gennemløb.
Avatar billede erikjacobsen Ekspert
07. maj 2004 - 20:46 #2
1) Det er kun første gang nHash er 0
2) *key er tallet, som pointeren peger på
3) *key++ eller med de implicitte paranteser (*key)++ aflæser tallet som
  pointeren peger på, og tæller derefter pointeren op til at pege på
  næste element/tal
Avatar billede arne_v Ekspert
07. maj 2004 - 20:47 #3
(og key er så tilsyneladende en pointer til const ikke en const pointer til)
Avatar billede erikjacobsen Ekspert
07. maj 2004 - 20:47 #4
Det mener du ikke, Arne, at den lægger 1 til tallet. Den tæller så meget
op at den peger på næste element, afhængig af pointerens type.
Avatar billede narrr Nybegynder
07. maj 2004 - 20:53 #5
heh, jeg havde helt overset den while-løkke. Tak for dit svar, nu forstår jeg også det med pointeren bedre.
Avatar billede arne_v Ekspert
07. maj 2004 - 20:53 #6
Jeg vil formulere det som at på C/C++ level ligger den 1 til pointeren, men
på assembler level ligger den størrelsen af det key peger på til.

key++ og key=key+1 gør det samme også i denne context. Derfor vil jeg forsvare
"ligge 1 til" - vi er naturligvis ikke uenige om hvad der sker.
Avatar billede narrr Nybegynder
07. maj 2004 - 20:54 #7
1. Det var et svar til arnes første indlæg.
Avatar billede narrr Nybegynder
07. maj 2004 - 20:56 #8
erikjacobsen, vil du ikke mene, at paranteserne skal placeres sådan her: *(key++) ? For hvis du siger (*key)++, så ændrer du jo i det pointeren peger på, og det kan man ikke med en const pointer.
Avatar billede erikjacobsen Ekspert
07. maj 2004 - 23:44 #9
Jo, narrr, jeg fik parenteserne forkert.
Avatar billede arne_v Ekspert
16. juni 2004 - 23:30 #10
Lukke tid ?

og et svar
Avatar billede narrr Nybegynder
19. juni 2004 - 02:16 #11
JA NEMLIG JA.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester