Avatar billede mikkeljans Nybegynder
09. december 2004 - 11:36 Der er 7 kommentarer

Hjælp med tutorial

Jeg har lidt svært ved at forstå den her tutorial:
http://nehe.gamedev.net/data/articles/article.asp?article=07
Måske fordi jeg ikke forstår pointers.

Men f.eks står der:
FACE*    m_pFaces;
...
FACE& face = m_pFaces[n];


Hvordan kan han lave en ny FACE og så sige at den skal være et array nummer fra m_pFaces. Det ser ikke ud til at m_pFaces er defineret som array?

Jeg har før lavet Arrays som vectors, men det er præcis hvad der står at man Ikke skal.
Avatar billede jpk Nybegynder
09. december 2004 - 11:48 #1
m_pFaces er defineret som en pointer, altså bliver der sikkert et sted lavet et array a.la.:

m_pFaces = new FACE[nCount];

dermed "peger" m_pFaces på et array og de enkelte elementer kan tilgås som:
m_pFaces[0], m_pFaces[1] etc.

"FACE& face" er IKKE et nyt element, men en reference til et element (m_pFaces[n]).
Avatar billede mikkeljans Nybegynder
09. december 2004 - 12:09 #2
Hmm.. Ja, det virker sku.. Vil det sige at Pointers kan fungere som Arrays?
Jeg har aldrig helt forstået Pointers. Jeg ved godt at det er en variable der peger på en hukommelses adresse.. Men mere forstår jeg ikke ved dem.
Avatar billede mikkeljans Nybegynder
09. december 2004 - 12:20 #3
m_pFaces = new FACE[nCount];... Den laver en Array med nCount antal elemter i som m_pFaces på.
Men hvad nu hvis nCount bliver større, så skal jeg vel til at slette alle elementer igen, lave en større array og ligge elementer i den igen?
Avatar billede jpk Nybegynder
09. december 2004 - 12:32 #4
ja, arrays i C/C++ er ikke dynamiske, så hvis der ikke er plads nok i et eksisterende array, skal du oprette et nyt array med mere plads, kopiere alle objekter over og slette det gamle.

Hvis man har behov for at ændre størrelsen ofte, bruger man typisk en vector.
En vector (ikke i matematisk forstand) er netop en klasse der pakker denne funktionalitet ind, så man ikke skal koncentrere sig om det.
Avatar billede mikkeljans Nybegynder
09. december 2004 - 15:33 #5
Men hvorfor skal jeg så lave en pointer til en array.
Er det ikke nemmere at bare have en array og så direkte ændre på den?
Avatar billede jpk Nybegynder
09. december 2004 - 15:41 #6
Du kan IKKE lave et array sådan:
FACE m_Faces[n];

hvis n ikke er kendt af compileren, da den så ikke ved hvor meget memory der skal afsættes!

Et objekt oprettes på stack'en sådan:
FACE Face;

men oprettes på heap'en således:
FACE* pFace = new FACE;

I sidste tilfælde sker det "runtime" og der skal altså ikke afsættes plads allerede ved kompilering.
Avatar billede jpk Nybegynder
09. december 2004 - 15:42 #7
Du kan godt starte ud med et array sådan:

FACE m_Faces[100];

men du kan ikke ændre størrelsen bagefter...
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