POKAZIVAČI
Pokazivači nam omogućavaju da prikažemo složene
strukture podataka, da mijenjamo vrijednosti argumenata funkcije, da radimo
sa dinamički alociranom memorijom, te da efektivnije radimo sa nizovima.
Pokazivač nam osigurava indirektan način pristupa vrijednosti određenog
podatka. Pogledajmo kako pokazivači rade na jednostavnom primjeru,
int count = 10, *int_pointer;deklariran je integer count koji ima vrijednost 10, i pokazivač nazvan int_pointer. Upamtite da prefiks * definira da je to pokazivač. Da bi uspostavili indirektnu vezu između int_pointer i count, koristi se prefiks &, tj.
int_pointer = &countOvim je pridružena memorijska adresa count pokazivaču int_pointer, a ne stvarna vrijednost count koja se nalazi na toj adresi.
POKAZIVAČI POKAZUJU MEMORIJSKE ADRESE, A NE
VRIJEDNOSTI VARIJABLE!
Da bi pridružili vrijednost count korištenjem
int_pointer, koristi se * za pridruživanje, npr.
x = *int_pointer;Pošto int_pointer je postavljen da pokazuje memorijsku adresu count, ova operacija ima učinak pridruživanja sadržaja memorijske adrese na koju pokazuje int_pointer varijabli x, pa nakon operacije variabla x ima vrijednost 10
#include <stdio.h> main() { int count = 10, x, *int_pointer; /* pridruživanje memorijske adrese count pokazivaču int_pointer */ int_pointer = &count; /* pridruživanje vrijednosti pohranjene na adresi na koju pokazuje int_pointer varijabli x */ x = *int_pointer; printf("count = %d, x = %d\n", count, x); }Ovim, međutim, nije pokazana dobra strana uporabe pokazivača.
Slijedeći program pokazuje drugi način uporabe pokazivača, ovaj put sa znakovima,
#include <stdio.h> main() { char c = 'Q'; char *char_pointer = &c; printf("%c %c\n", c, *char_pointer); c = 'Z'; printf("%c %c\n", c, *char_pointer); *char_pointer = 'Y'; /* pridruživanje Y kao sadržaja memorijske adrese na koju pokazuje char_pointer */
printf("%c %c\n", c, *char_pointer); }