-swifty- Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 (endret) Heia, Jeg har lest litt om pekere i c, og har skjønt hvordan det fungerer, ihvertfall delvis. At en peker er en variabel som holder på minneadressen til en annen variabel. Har også fått med meg at en array er en peker til det første arrayelementet, så ved å legge til bytes på pekeren kan man da få verdien til andre arrayelementer. Greia er at jeg ikke helt skjønner når man skal få bruk for dette, så er det noen som har litt tid og gidder å gi meg et lite praktisk eksempel på når man vil bruke pekere. Takk. Endret 28. juni 2004 av -swifty- Lenke til kommentar
Tr1llobite Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 Hehe, du kan jo se på tråden jeg startet for en stund siden: http://forum.programmer.no/index.php?showtopic=264136 Du kan lese/skrive til variabler i systemet, for eksempel andre prosesser o.s.v. Lenke til kommentar
søppel Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 (endret) Tenk deg du har en variabel med masse data i, vi kan kalle den masse_data. Det vil ta enormt med tid å kopiere alle disse dataene når man skal sende denne til en funksjon som f.eks. skal regne ut noe ut i fra disse dataene. Tenk deg at masse_data er en liste med tall, og du har en funksjon kallt summer() som finner summen av alle tallene i en liste. Da er det greit å kunne sende en liten peker som peker på masse_data til summer() i stedet for å sende en kopi av alle disse dataene slik at summer() kan finne summen. Så man bruker pekere -- til å peke på data. ..blandt annet.. Edit: Ex: #include <iostream> #include <time.h> using namespace std; struct MasseData { int a; int b; int c; int d; int a1; int b1; int c1; int d1; std::string blah1; std::string blah2; std::string blah3; // o.s.v. }; // MasseData int summerP(MasseData* masse_data) { int sum = masse_data->a + masse_data->b + masse_data->c + masse_data->d; return(sum); } // summerP int summerR(MasseData& masse_data) { int sum = masse_data.a + masse_data.b + masse_data.c + masse_data.d; return(sum); } // summerR int summerV(MasseData masse_data) { int sum = masse_data.a + masse_data.b + masse_data.c + masse_data.d; return(sum); } // summerV int main() { MasseData masse_data; masse_data.a = 0; masse_data.b = 1; masse_data.c = 2; masse_data.d = 3; clock_t s; int sum; unsigned int loops = 100000000; s = clock(); for(unsigned int i = 0; i < loops; i++) { sum = summerP(&masse_data); } cout << sum << endl; cout << "Passing by pointer, cpu time: " << clock() - s << endl; s = clock(); for(unsigned int i = 0; i < loops; i++) { sum = summerR(masse_data); } cout << sum << endl; cout << "Passing by reference, cpu time: " << clock() - s << endl; s = clock(); for(unsigned int i = 0; i < loops; i++) { sum = summerV(masse_data); } cout << sum << endl; cout << "Passing by value, cpu time: " << clock() - s << endl; return(0); } // main 6Passing by pointer, cpu time: 1260000 6 Passing by reference, cpu time: 1250000 6 Passing by value, cpu time: 9630000 Det er ikke altid man sparer noe på å passe data v.h.a. pekere/reference; det tar litt tid å dereference dataene også. Detaljer rundt dette finner du i tutorialer på google. Søker du på "mindview" på google finner du en gratis, komplett bok. Endret 28. juni 2004 av søppel Lenke til kommentar
saboi Skrevet 28. juni 2004 Del Skrevet 28. juni 2004 bruk pekere til iteratorer. neida nå bare tulla jeg Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå