zwracanie przez funkcje

0

Witam mam problem zwiazany z zwracaniem pprzez funkcje "naprzyklad wskaznika,referencji".

 
int zwracam(int l)
{
   //jakas instrukcja 
   return *jakas_zmienna;
}

Od takiego zwracania

int* zwracam(int l)
{
   //jakas instrukcja 
   return jakas_zmienna;
}
 

Czyli raz sie zwraca wsk poprzez "return" a raz sie zwracam poprzez typ funkcji ??

0

Punkt pierwszy to pisz porządnie po polsku. Ja rozumiem, że to nie jest forum polonistyczne, ale jeśli muszę przeczytać Twój post dwa razy, by wyrozumieć się o co w nim chodzi, to coś tu jest już nie tak. Kwestia szacunku dla czytelnika.

Punkt drugi: Okej, mogę spróbować Ci wytłumaczyć różnicę, ale najpierw powiedz mi, czy wiesz co to jest wskaźnik?

0

Wiem co to wskaznik.

0
Poczatkujacy bardzo napisał(a):
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
}
Poczatkujacy bardzo napisał(a):
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
}
0

Gdybyś wiedział to nie zadawał byś takiego pytania. Proponuję powrót do lektury, jeżeli będziesz chciał to na siłę przepchnąć to później będzie tylko gorzej.

0

Dziekuje ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1