Citat:
Pekare är precis vad som namnet innebär, de syftar liksom på ställen i minnet istället för att själva innehålla data.
Kod:
int i = 8; int *p = &i; //& skapar en pekare, alltså syftar pekaren p på i. nu innehåller p en minnesadress istället för någon slags data. //vi kan komma åt det som p syftar på genom att skriva *p, så kallas det en dereference. *p = 2; //förändra data som p syftar på, sen innehåller i 2 printf("%d\n", i); //visa förändringen
Det är viktigt att man lär sig använda pekare för de kommer väl till pass när man jobbar med till exempel struct:er. Föreställ dig att man har skrivit en struct och vill komma åt och jobba med structen i en funktion.
Kod:
struct thing { int a; int b; }; void do_something(thing A) { A.a = 1; } int main(int argc, char **argv) { thing x; do_something(x); printf("%d\n", x.a); //Ska x.a vara 1 efteråt? Vad tror du? Läs följande förklaringen eller kör själv... }
Eftersom C/C++ använder pass-by-value-systemet, ska den ovanstående funktionen do_something ta emot ett helt objekt, alltså ska x kopieras och sen ska kopian skickas till funktionen när man kallar den. Om man inte vill att funktionen ska ta emot en kopia utan objektet direkt, för att man vill ändra på objektet och vill att förändringarna ska synas av den kallande funktionen, blir det lite jobbigt om funktionen bara tar emot en kopia.
Dessutom är det inte så bra när det gäller prestanda. Tänk på om det finns många element inom struct:en som måste kopieras, så blir det uppenbart varför.
Alltså finns pekare. Man kan köra pekare istället för kopior, såhär:
Kod:
void do_something(thing * A) { A->a = 1; } int main(int argc, char **argv) { thing x; do_something(&x); printf("%d\n", x.a); }
Med pekare kan man lätt göra sånt.
Ställ frågor om det var nånting oklart eller du vill få ett till exempel...
__________________
Senast redigerad av kanes272 2017-11-25 kl. 03:15.
Senast redigerad av kanes272 2017-11-25 kl. 03:15.