Avatar billede danielhep Nybegynder
28. januar 2002 - 14:04 Der er 12 kommentarer og
3 løsninger

Pointers

Pointers bruger man ikke rigtigt i Visual Basic, og jeg har aldrig arbejdet med dem.  Hvem kan give en god forklaring på hvad "Pointers" er for noget gejl???
Avatar billede wisen Nybegynder
28. januar 2002 - 14:10 #2
Kort fortalt er det et pegepind på et område af hukommelsen. Man kan allokere noget hukommelse til at indeholde typisk et eller anden objekt, og for at kunne finde objektet igen, har man en pointer på det...

/Wisen
Avatar billede danielhep Nybegynder
28. januar 2002 - 14:18 #3
Jeg har forstået hvad en pointer er sådan generalt, men jeg har aldrig brugt dem i praktis...Hvornår har man brug for at bruge en pointer?
Avatar billede wisen Nybegynder
28. januar 2002 - 14:27 #4
Det er ikke noget man har _brug_ for; det er en mulighed...
Avatar billede hono Nybegynder
28. januar 2002 - 14:33 #5
Hmmm, jeg kæmpede mig engang igennem et hæfte om C++. Er det ikke noget med at de gør en i stand til at ændre en variabel i anden funktion en den man aktuelt arbejder med??? Det kan også være jeg blander noget sammen.

Hono
Avatar billede wisen Nybegynder
28. januar 2002 - 15:01 #6
hono >> Hmm, jeg er ikke lige sikker på hvad der er du mener; men det lyder forkert :)
Avatar billede danielhep Nybegynder
28. januar 2002 - 15:11 #7
Jeg sidder med at chat program skrevet i Borland Builder C++ 5.0.
Der er lavet noget med noget pointer halløj, og den ændre nogle variabler her gang at en Client logger af,logger på,disconnecter bla.....Måske det kunne hjælpe lidt på hvad jeg mener.
Avatar billede wisen Nybegynder
28. januar 2002 - 15:18 #8
Hvad er det helt præsis du gerne vil vide ?
Avatar billede danielhep Nybegynder
28. januar 2002 - 16:46 #9
Det er lidt svært at sige det helt nøjagtige...Det som jeg leder efter er nok en forklaring, men jeg ved godt hvad en pointer er, men kender i ikke det med at man ved hvordan de fungere i teori, men ikke i praktis....
Avatar billede professoren Nybegynder
28. januar 2002 - 17:02 #10
Vi kunne godt give nogle eksempler, hvor det er "smart" at bruge pointers,
i praxis, altså...
Avatar billede ricelius Nybegynder
28. januar 2002 - 19:02 #11
Jeg kan prøve at overføre pointerterminologien til VB - når du normalt passer argumenter til en funktion, er det ByRef. Det betyder, at du kan ændre parametrene inde i funktionen. Du kan optionelt vælger at passe ByVal, så får ændringerne ingen effekt uden for funktionen.
I C bruger man pointers, hvor man ville bruge ByRef i VB, og variable, hvor man ville bruge ByVal.
Jeg kan give et lille eksempel:

' VB
Sub ChangeVar(ByRef i As Integer) ' ByRef keyword isn't necessary
i = 1024
End Sub
...
Dim y As Integer
y = 2048
ChangeVar y
' y is now 1024

// C(++)
int ChangeVar(int *pi) // pointer to int, i.e. address of argument
{
if(pi) // if pi==0 then a read/write error would occur - no good :)
*pi=1024; // change value, that is change memory location to which pi points
}
...
int i = 2048;
ChangeVar(&i); // pass _address_ of local i, _not_ i (i.e. value of)
// i is now 1024

Det her ville selvfølgelig ikke virke med ByVal i.e. uden brug af pointers.
Dette er den mest basale brug af pointers. Hvis der er nogle uklare formuleringer ovenfor, så spørg - det gik lidt hurtigt, da jeg skrev det. For resten har jeg ikke prøvet at compile, så der er muligvis små tastefejl etc...
- Ricelius
Avatar billede ricelius Nybegynder
28. januar 2002 - 19:07 #12
Man bruger for resten også pointers ved dynamisk allokering, dvs. ved allokering på the heap. Når du normalt allokere, fx
int i = 0;
el.
Dim i As Integer
sker det på stakken. I C kan man allokere på the heap ved:
int *pi = new int;
*pi = 1234;
delete pi;
pi = NULL;
Husk at deallokere bagefter - ellers får du memory leaks. Dette er meget smart ved arrays, hvor man ikke kender arraystørelsen, når man kompilerer. Fx:
int *pi = new int[user_input_int];
pi[0]=pi[1]=some_value;
delete[] pi;
pi=NULL;
Vær opmærksom på, at hvis der ikke er nok memory, vil pi være NULL efter new, og så vil man få en read/write-fejl - no good :). Derfor kontrollerer man altid efter brug af new.
Avatar billede ricelius Nybegynder
28. januar 2002 - 19:09 #13
Uuups... Nogle små fejl i ovenstående: "Når du normalt allokerer". Desuden mener jeg "Dynamisk allokering er meget smart ved arrays...", jeg mener ikke memory leaks :).
Avatar billede danielhep Nybegynder
28. januar 2002 - 23:33 #14
Jeg tror at det er ved at være der..Men hvem skal jeg dog give point...Der er mange gode svar...Så jeg deler dem ud så alle få nogle...Jeg synes at der er mange gode, så det bliver sådan..

Tak for hjælpen :=)
Avatar billede ricelius Nybegynder
29. januar 2002 - 14:44 #15
Selv tak :)
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