pointers... har jeg forstået det rigtigt?

Tags:    c++

ok jeg har skrevet spørgsmål om pointers herinde 1000 gange før, og det er kun lykkedes mig delvist at fatte...
nu tror jeg at jeg har fattet det, men vil bare lige gøre mig sikker.

altså "*" efter en type betyder at man vil lave en pointer?
altså fx.
Fold kodeboks ind/udKode 

betyder at man laver en int pointer?

"*" før en pointer betyder "verdien af"?
altså:
Fold kodeboks ind/udKode 

printer verdien af pointeren "p" til skærmen?

og til sidst "&" før et variabel betyder "adressen af", altså ikke selve variablet, men hvor i hukommelsen dette variabel ligger?
fx:
Fold kodeboks ind/udKode 

betyder "verdien af p, skal adresseres til x"

det er sikkert forkert, men ret mig lige der hvor jeg tager fejl...

desuden vil jeg gerne vide hvad de skal gøre godt for?
i alle artikler jeg er stødt på er der eksempler som:
Fold kodeboks ind/udKode 


det er også meget fint for at vise hvordan pointere bruges, men dette kunne ligeså godt være gjort uden pointer!
kan i ikke give mig et eksempel på en situation hvor det rent faktisk er nødvændigt, eller bare idet mindste nyttigt, at bruge pointers?
har endnu ikke fattet hvad der er så godt ved dem... jeg bruger dem aldrig :S

håber i kan gøre tingene lidt mere klart for mig :)

på forhånd: Tak :D

-Craksy



Denne er ikke logisk:
*p = &x;
Hvis det er
int* p;
int x;
Så er det forkert.

Du kunne skrive:
*p = x;
Hvilket vil give det p peger på værdien af x, et helt eksempel:
int y = 7;
int* p = &y;
int x = 5;
*p = x;
Her efter vil y være 5.

Du kunne også mene:
p = &x;
hvilket ville få p til at pege på x;
Det er det samme der sker her:
int* p = &x;

pointere bliver oftest brugt sammen med arrays og dynamisk allokeret hukommelse. I C bruger man dem også til parameteroverførsel, da man ikke har referencer i C, det har man i C++.

Hvis ikke du har brug for pointere, så fint, undlad at bruge dem når du kan. Men de er en absolut nødvendighed i C og C++



tak for dit svar :)

det var også mig der kludrede i det, i mit eget eksempel... så smart er jeg -.-'

men jeg tror jeg har forstået det nu... dog stadig ikke hvad det kan bruges til.

jeg fik det vidst engang forklaret som en skrivebords genvej.
hvis du har et spil og gerne vil kunne kører det fra skrivebordet kunne man egentlig bare kopiere hele spil mappen, og smide den ud på skrivebordet...
men dette ville få spillet til at fylde dobbelt så meget.
i stedet opretter man en genvej (pointer) der pejer på adressen til .exe filen i den oprindelige mappe.
dette sparer en masse plads.

hvis det virkelig fungere på den måde, er det faktisk meget nemt at forstå.
gør det det? :P

og grunden til at jeg gerne vil forstå det, er at jeg endelig har taget mig sammen til at lærer windows API'en...
leger også lidt med directX SDK'en ved siden af, og har lagt mærke til at der er en masse funktioner der tager en pointer som argument, istedet for det egentlige variabel.
dette giver overhovedet ingen mening for mig :S

anyway igen: Tak for dit svar :)
det hjalp en del xD



Man kan godt sammenligne en pointer med en genvej.

Win32Api er (/var) et rent C Api og man bruger derfor pointer mange steder. Det er der flere grunde til:

1: Hvis man skal overføre et gigantisk objekt (/variabel) til en funktion og ikke brugte pointere ville man være nødt til at tage et kopi af objektet og sende kopien til funktionen, det er meget ressourcekrævende.

2: Hvis funktionen skal ændre på objektet og den der kalder funktionen skal se ændringerne, dur det ikke at tage et kopi af variablen, for så er det kun kopien der er ændret.

3: At overføre arrays til funktioner, foregår på (ca.) samme måde som med pointere.

Man kunne godt bruge C++ referencer i stedet for pointere i de to første tilfælde.

I nogle sprog er det ikke klart om der bliver opereret med pointere eller ikke, men i C og C++ er man nødt til at angive det hver gang.



t