int zwracam(int l)
{
//jakas instrukcja
return *jakas_zmienna;
}
Kiedy piszesz *jakas_zmienna
, to – o ile jakas_zmienna
jest wskaźnikiem – dostajesz się do wartości, na którą wskazuje wskaźnik jakas_zmienna
. A więc, return *jakas_zmienna
powoduje, że zwracasz wartość, na jaką wskazuje ten wskaźnik.
Przykład.
#include <stdio.h>
int i = 5;
int *wskaznik = &i; // wskaźnik wskazujący na i
int zwracam()
{
return *wskaznik;
}
int main()
{
printf("%d\n",i); // Drukujemy zawartość zmiennej i
printf("%d\n",*wskaznik); // Drukujemy liczbę, na którą wskazuje wskaźnik - trzeba użyć gwiazdki
printf("%d\n",zwracam()); // Nie używamy gwiazdki - funkcja zwraca po prostu liczbę, a nie wskaźnik
int j = zwracam(); // j ma wartość, którą otrzymała od funkcji zwracam
j = 50;
printf("%d\n",*wskaznik); // Wypisuje się nadal 5 a nie 50 - funkcja zwróciła liczbę a nie wskaźnik i ta liczba jest już niezależna od oryginalnego wskaźnika
}
int* zwracam(int l)
{
//jakas instrukcja
return jakas_zmienna;
}
Teraz znowu jakas_zmienna
musi być wskaźnikiem. Ale tym razem funkcja zwraca tenże wskaźnik, a nie wartość, na którą ten wskaźnik wskazuje. Wskaźnik jest normalną zmienną, jak każda inna – można więc go jak każdą inną zmienną zwrócić. Tylko trzeba w nazwie funkcji zaznaczyć, że zwraca się wskaźnik, a nie „płaską” wartość – dlatego piszesz int* zwracam
, podobnie jak deklarujesz wskaźniki.
Przykład.
#include <stdio.h>
int i = 5;
int *wskaznik = &i; // wskaźnik wskazujący na i
int* zwracam()
{
return wskaznik;
}
int main()
{
printf("%d\n",i); // Drukujemy zawartość zmiennej i
printf("%d\n",*wskaznik); // Drukujemy liczbę, na którą wskazuje wskaźnik - trzeba użyć gwiazdki
printf("%d\n",*zwracam()); // Funkcja zwróciła wskaźnik, trzeba więc jak przy każdym innym wskaźniku użyć gwiazdki, by dostać się do wartości
int* j = zwracam(); // Zapisujemy wskaźnik, który zwróciła funkcja jako j
*j = 50;
printf("%d\n",*wskaznik); // Wypisuje się 50 – zmienna wskaźnikowa j wskazuje na tą samą wartość w pamięci co wskaźnik zwrócony przez funkcję i na tą samą wartość w pamięci, co oryginalny wskaźnik
}