Advertisement
BiceMaster

Pekare i C++

Jun 11th, 2012
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. // Pilarna i förklaringarna nedan beskriver förhållanden mellan variabler och
  2. // adresser och är alltså inte operatorn -> i C++
  3.  
  4.  
  5. int numBikes = 3;
  6. /*  variabelnamn        minnesutrymme
  7.  * ################    ################
  8.  * #  numBikes    # -> # 3            #
  9.  * ################    ################
  10.  * tilldelning av en vanlig variabel.
  11. */
  12.  
  13. int* numCars = NULL;
  14. /*  variabelnamn        minnesutrymme
  15.  * ################    ################
  16.  * #  numCars     # -> # NULL         #
  17.  * ################    ################
  18.  * En pekarvariabel.
  19.  * Det är god sed att sätta en oanvänd pekare till NULL.
  20. */
  21.  
  22. numCars = new int;
  23. /*  variabelnamn:       minnesutrymme:      0x12345678:
  24.  * ################    ################    ################
  25.  * #  numCars     # -> # 0x12345678   # -> #              #
  26.  * ################    ################    ################
  27.  * Nu tilldelas pekaren numCars värdet 0x12345678 som den får av new.
  28.  * new ber operativsystemet om en bit ledigt minne. Operativsystemet sätter en
  29.  * bit minne åt sidan och ger sedan adressen till den biten minne till new som
  30.  * new sedan returnerar. Den adressen tilldelas här till numCars. Då minnet som
  31.  * vi precis fått adressen till kan ha använts till vad som helst så har vi
  32.  * ingen aning om vad som finns där.
  33. */
  34.  
  35. *numCars = 5;
  36. /*  variabelnamn:       minnesutrymme:      0x12345678:
  37.  * ################    ################    ################
  38.  * #  numCars     # -> # 0x12345678   # -> # 5            #
  39.  * ################    ################    ################
  40.  * med hjälp av * jobbar vi mot 0x12345678 istället för numCars.
  41. */
  42.  
  43. delete numCars;
  44. /*  variabelnamn:       minnesutrymme:
  45.  * ################    ################
  46.  * #  numCars     # -> # 0x12345678   #
  47.  * ################    ################
  48.  * Minnesutrymmet med adressen 0x12345678 kan nu användas till ngt annat av
  49.  * operativsystemet. delete säger till operativsystemet att 0x12345678 inte
  50.  * används längre. Operativsystemet kan nu tilldela 0x12345678 till ngt helt
  51.  * annat, kanske t o m till ett helt annat program.
  52.  *
  53.  * Observera att då pekaren fortfarande har adressen till minnesutrymmet så går
  54.  * det att läsa och skriva till den. Operativsystemet skriker dock till då och
  55.  * du får upp ett fel som säger att du skrivit/läst där du inte får
  56.  * läsa/skriva.
  57.  *
  58.  * Om man kör delete på pekaren igen så "smäller" det. Operativsystemet kommer
  59.  * säga: "Den där biten minne har du inte tillgång till. Alltså kan du inte
  60.  * säga att du är klar med den där biten minne. Någonting har gått snett.
  61.  * Varsågod här får du ett felmeddelande".
  62. */
  63.  
  64. numCars = NULL;
  65. /*  variabelnamn:       minnesutrymme:
  66.  * ################    ################
  67.  * #  numCars     # -> # NULL         #
  68.  * ################    ################
  69.  * Genom att tilldela pekaren NULL så "smäller" det inte när man kör delete på
  70.  * pekaren. Om pekaren är NULL och delete körs på den ignoreras det. Man kan då
  71.  * även göra test på pekaren för att se om den används eller ej. Har man inte
  72.  * gjort till vana att alltid sätta pekare till NULL när de inte används har
  73.  * man ingen aning om vilka pekare som används och vilka som inte används. Gör
  74.  * därför till vana att alltid sätta pekare till NULL.
  75. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement