117
GDY ARGUMENT JEST WSKAŹNIKIEM...
St.łjcl do trzeciej wartości można się dostać tak (komórki w tablicy numeruje się od zera):
zaienna ■ tab[2];
albo wykorzystując metodę wskaźnikową: zmienna ■ *(tab ♦ 2);
Z definicji obie te metody są równoważne.
Z definicji (z wyjątkiem użycia operatora sizeof) wartością zmiennej lub wyrażenia typu tablicowego jest wskaźnik na jej pierwszy element (tab == fttabO).
Co więcej, można |>ójść w druga stronę i potraktować wskaźnik jak tablicę:
int ‘wskaźnik;
wskaźnik ■ &tab(l]; /• lub wskaźnik ■ tab + 1; */ zaienna ■ wskaźnik(1); /• przypiszo 300 •/
Jako ciekawostkę podamy, iż w języku C można odnosić się do elementów tablicy jeszcze w inny sposób:
printf ("Xd\n", l[tab]);
Skąd ta dziwna notacja? Uzasadnienie jest proste:
tab[l] = *(tab ♦ 1) = *(1 ♦ tab) = 1[tab]
Podobną składnię stosuje m.in. asembler GNU.
Czasami zdarza się, że argumentem (lub argumentami) funkcji są wskaźniki. W przypadku “normalnych” zmiennych nasza funkcja działa tylko na lokalnych kopiach tychże argumentów, natomiast nie zmienia zmiennych, które zostały podane jako argument. Natomiast w przypadku wskaźnika, każda operacja na wartości wskazywanej powoduje zmianę wartości zmiennej zewnętrznej. Spróbujmy roz|>atr/eć poniższy przykład:
Sinclude <stdio.h>
void func (int ‘zmienna)
•zmienna - 5;
int main ()
int z*3;
printf ("z-y.d\n", z); /• wypisze 3 */ func(tz);
printf ("z=Xd\n", z); /• wypisze 5 */
Widzimy, że funkcje w języku C nie tylko potrafią zwracać określoną wartość, lecz także zmieniać dane, podane im jako argumenty. Ten sposób przekazywania argumentów do funkcji jest nazywany przekazywaniem przez wskaźnik (w przeciwieństwie do normalnego przekazywania przez wartość).