Avatar billede dulius Nybegynder
06. juli 2005 - 15:06 Der 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++ :-)

Mvh. Julius
Avatar billede arne_v Ekspert
06. juli 2005 - 15:17 #1
Du skal bruge pointers til næsten alt !

Du skal nemlig bruge pointers hver gang du allokerer noget dynamisk med new og
det gør man næsten hele tiden.
Avatar billede seeker Nybegynder
06. juli 2005 - 15:49 #2
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.
Avatar billede seeker Nybegynder
06. juli 2005 - 15:49 #3
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.
Avatar billede nlf Nybegynder
06. juli 2005 - 16:01 #4
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.
Avatar billede dulius Nybegynder
06. juli 2005 - 19:09 #5
Hej. Tak for jeres svar. Smid et svar, så deler jeg points ud.
Avatar billede arne_v Ekspert
06. juli 2005 - 19:47 #6
svar
Avatar billede nlf Nybegynder
06. juli 2005 - 21:53 #7
Svar ;-)
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