06. juli 2005 - 15:06Der er
4 kommentarer og 3 løsninger
Anvedelighed af pointers i C++
Hej.
Jeg er meget habil PHP-koder, har kodet mange timer om ugen i 4-5 år efterhånden, men det her vist både en negativ og positiv indflydelse på min indlæring af C++. De grundlæggende ting (variabler, konstanter, kontrolstruktrer, klasser, funktioner mm.) har jeg meget nemt ved, men f.eks. pointers fatter jeg ikke lige så meget af. Jeg forstår fint syntaksen og sådan, men jeg kan ikke lige se i hvilke tilfælde jeg skal bruge det. Nogen der har en idé til et eller andet jeg kunne prøve og kode, hvor man skal bruge pointers? Jeg har læst/skimmet en hel del C++ bøger, men synes ikke rigtig nogen af dem forklarer HVAD jeg skal bruge pointers til, bare HVORDAN man bruger dem.
Håber I lige kan sparke mig i måsen, så jeg kan komme videre med C++ :-)
Jeg kender ikke C++, men har en hvis opfattelse af pointere.
Pointere er i sagens natur noget der peger på noget andet.
Eksempel vis: Du skal lave et dynamisk objekt kald, så kalder du i stedet en pointer. Den pointer kan du så definere forskellige steder i din kode til at pege på (eller "være") det ønskede objekt.
Nogen syntes det er ligegyldige andre syntes de er fantastisk, men alle er enige om at man skal holde tungen lige i munden når man bruger dem.
Jeg kender ikke C++, men har en hvis opfattelse af pointere.
Pointere er i sagens natur noget der peger på noget andet.
Eksempel vis: Du skal lave et dynamisk objekt kald, så kalder du i stedet en pointer. Den pointer kan du så definere forskellige steder i din kode til at pege på (eller "være") det ønskede objekt.
Nogen syntes det er ligegyldige andre syntes de er fantastisk, men alle er enige om at man skal holde tungen lige i munden når man bruger dem.
Dynamisk allokering, som Arne siger, og så er pointers også meget anvendelige til at overflytte større variabler/klasser hurtigt til funktioner eller klasser. Fx kan man have denne klasse: class MyClass { int y,g,f,a,f,g,h,h,we,r,g,hg,e,a,g,g,se; float g,h,s,a,f,h,a; char t,a,b,c,d,t; }; (jeg ved godt, at der findes variabler af samme navn, men det er bare et eksempel på en klasse med megen data)
Hvis du fx vil manipulere sådan en klasse i en funktion, så vil denne deklaration: void SetClass(MyClass myclass); få compileren til at lave kode til at kopiere al klassens data (dvs. temmeligt meget data), når funktionen kaldes. Hvis denne funktion kaldes ofte, så kan det sænke hastigheden (det kan det sådan set ikke med programmer, der ikke belaster cpu'en nok i forvejen). Hvis du derimod lavede det via referencer eller pointers: void SetClass(MyClass *myclass); //pointer void SetClass(MyClass &myclass); //reference så ville der kun blive kopieret en unsigned int (en pointers størrelse) til funktionen, og man kan stadig benytte klassens data som man ellers ville have kunnet med den første funktion (det kan så diskuteres om man lige bør sætte et 'const' foran, så programmøren ikke kommer til at ændre klassen, hvis han ikke må).
Man kan også benytte pointers til meget andet, men her var et konkret eksempel, hvorpå man både sparer plads på stack'en og får eksekveret koden hurtigere, da man ikke behøver at kopiere lige så megen data.
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.