Avatar billede mrandersdk Nybegynder
07. juli 2005 - 16:53 Der er 5 kommentarer og
1 løsning

hvorfor pointers ?

Jeg har siddet og leget lidt med C++ og er nu kommet til pointers. Det jeg har forstået er at de virker lidt ligesom en normal variabel, bare at man sletter dem fra hukommelsen når man har brugt dem. Men hvorfor er det smartere end at bare cleare sine normale variabler? er det noget med hvor windows "gemmer" disse variabler der derfor gør pointers hurtigere? eller hvad er det der gør dem så smarte?
Avatar billede tuxic Nybegynder
07. juli 2005 - 17:59 #1
Se eventuelt en anden post om samme emne, der næsten lige er besvaret.

Hvis en funktion skal virke på et stort objekt/struct er det hurtigere at sende en pointer til objektet end at kopiere objektet. Derudover er en række datastrukturer nemmere/mere fleksible med pointers: Hægtede lister, træer, stakke etc. (Kan jo også implementeres med arrays, men det er tit tungere og kan nemt involvere kopiering)
Avatar billede arne_v Ekspert
07. juli 2005 - 18:15 #2
char *p = new char[10];

allokerer 10 bytes fra heapen og sætter reference på stakken (som selv fylder 4 bytes
på de mest gængse systemer) til at pege på dem

det er ret praktisk at have noget som peger på noget: linkede lister er et
godt eksempel

i C++ kan man også sende ikke pointere over per reference, men i C er man nødt
til at bruge pointer og de fleste C++ programmører bruger nok pointer af gammel vane

hvis du prøver at lave en klasse som skal indeholde en anden klasse bliver
du hurtigt overbevist om at en pointer til den anden klasse er meget bedre
end at lade den decideret indeholde
Avatar billede mrandersdk Nybegynder
07. juli 2005 - 18:35 #3
ok, er ikke sikker på jeg helt forstår, men kan mærke at det nok er fordi jeg lige er startet og kun laver meget meget simple programmer (4+5=9 osv. :-) ). Men tak fordi i prøvede.
Avatar billede thomas_nj Nybegynder
07. juli 2005 - 20:30 #4
Følgende passer godt nok ikke helt til dit spørgsmål, men det viser en anden måde at anvende pointere på.

Eksempel

#include <iostream>

using namespace std;

void talEdit(int tal)
{
    tal=5;
    cout<<"Tal i funktion: "<<tal<<endl;
}
int main()
{
    int tal=4;
    cout<<"Tal foer funktion: "<<tal<<endl;
    talEdit(tal);
    cout<<"Tal efter funktion: "<<tal<<endl;
   
    system("pause");
    return 0;
}

  Normalt bliver variabler til funktioner kopieret over i funktionen. Dette bevirker at hvis de ændres i funktionen ændres de ikke i resten af programmet.

  Samme eks med pointere:

#include <iostream>

using namespace std;

void talEdit(int *ptal)
{
    *ptal=5;
    cout<<"Tal i funktion: "<<*ptal<<endl;
}
int main()
{
    int tal=4;
    int *ptal=&tal;
    cout<<"Tal foer funktion: "<<tal<<endl;
    talEdit(ptal);
    cout<<"Tal efter funktion: "<<tal<<endl;
   
    system("pause");
    return 0;
}


  Som du ser ændrer funktionen nu værdien af tal. Grunden til dette er at der nu ikke sendes en kopi af variablen men derimod af dens adr.
Avatar billede mrandersdk Nybegynder
09. juli 2005 - 21:52 #5
smid et par svar
Avatar billede arne_v Ekspert
09. juli 2005 - 22:07 #6
ok
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