07. juli 2005 - 16:53Der 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?
Mød TrackMan og Veo på Computerworld Cloud & AI Festival og hør, hvordan tech ændrer måden, vi træner og udvikler talent – fra skolebold til The Masters.
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)
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
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.
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.
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.