Przekazywanie przez wartość, zmienną - czy dobrze rozumiem

0

Witajcie,

Mam pytanie. Rozkminiam" temat przekazywania parametrów przez wartość i zmienną (inaczej referencję, wskaźnik dobrze rozumiem?). Skleiłem coś takiego:

 #include <iostream>

void przekaz_przez_wartosc( int Liczba )
{
    Liczba += 10;
    std::cout << "Wartosc liczby przekazanej przez wartosc wynosi: " << Liczba << std::endl;
}

void przekaz_przez_zmienna( int &Liczba )
{
    Liczba += 10;
    std::cout << "Wartosc liczby przekazanej przez zmienna wynosi: " << Liczba << std::endl;
}

int main()
{
    int Mojaliczba = 5;
    std::cout << "Nasza liczba zadeklarowana na poczatku = " << Mojaliczba << std::endl;
    przekaz_przez_wartosc( Mojaliczba );
    std::cout << "Nasza liczba po wywolaniu funkcji przekaz_przez_wartosc= " << Mojaliczba << std::endl;
    przekaz_przez_zmienna(Mojaliczba);
    std::cout << "Nasza liczba po wywolaniu funkcji przekaz_przez_zmienna= " << Mojaliczba << std::endl;
    return 0;
}

Teraz pytanie.
Przekazywanie przez wartość tworzy jakby "kopię" i na niej operuje i dlatego po wywołaniu funkcji i ponownym wywołaniu zmiennej "Mojaliczba" mam stara zmienna jaką zadeklarowałem (jest ona po wykonaniu funkcji usuwana)? Innymi słowy, jeśli tutaj chciałbym zachować wartość z funckji musiałbym ją przypisać do jakiejś zmienne powiedzmy coś takiego:

 MojaLiczbaNumerDwa = przekaz_przez_wartosc( Mojaliczba );  

Przy przekazywaniu przez zmienna odwołuje się do adresu w pamięci RAM do konkretnej zmienne (dzięki wskaźnikowi, refenecji) i wtedy zmieniam oryginalną zmienna dlatego po wywołaniu funkcji i ponownym wyświetleniu zmiennej "Mojaliczba" mam jej nową wartość z funkcji (nadpisała się jakby to ująć)?

Dzięki za rozwianie wątpliwości.

0

Trochę brzydko nazwałeś te przekazywanie zmiennej/parametru przez zmienną. Powinieneś pisać, że możemy zmienną przekazać przez:

  • wartość,
  • wskaźnik,
  • referencję.

Co do mechanizmu to wygląda tak, że przekazując przez wartość, do funkcji trafia tylko sama wartość zmiennej, a w funkcji operujemy na jej kopii. W przypadku przekazywania zmiennej przez wskaźnik do funkcji trafia adres w pamięci zmiennej. Zatem można ją zmieniać.

Co do zwracania wartości, to jeśli byś chciał zwrócić coś z funkcji jak piszesz:

MojaLiczbaNumerDwa = przekaz_przez_wartosc( Mojaliczba );

Wtedy byś musiał napisać np tak:

int przekaz_przez_wartosc( int Liczba )
{
  Liczba += 10;
  return Liczba;
}
 

int main()
{
  int Mojaliczba = 5;
  int MojaLiczbaNumerDwa = 0;

  MojaLiczbaNumerDwa = przekaz_przez_wartosc( Mojaliczba );

  std::cout << MojaLiczbaNumerDwa << std::endl;
}

Bo żeby zwrócić coś z funkcji przez wartość musisz użyć słowa kluczowego return oraz zadeklarować funkcję jako zwracającą dany typ tutaj int int przekaz_przez_wartosc( int Liczba )

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