problem z funkcjami
Ostatnio zmodyfikowano 2011-06-26 10:46
zupka Temat założony przez niniejszego użytkownika |
problem z funkcjami » 2011-06-25 17:57:54 #include <iostream>
void zwieksz( int ile ) { ile++; }
int zwieksz2( int ile ) { ile++; return ile; }
int main() { int ilosc = 0; zwieksz( ilosc ); std::cout << ilosc; zwieksz2( ilosc ); std::cout << ilosc; getchar(); return 0; }
Mam problem(jestem początkujący wiec proszę o wyrozumiałość)a mianowicie czy jest mozliwosc zmiany wartosci w funkcji aby nastepnie ta wartosc byla wyswietlona w glownym programie?
przyklad do gory i cos nie chce dzialac prosze o odp |
|
waxx |
» 2011-06-25 18:12:01 void zwieksz( int & ile ) { ile++; } |
|
dmx81 |
» 2011-06-26 02:05:42 a dokladniej znaczy to tyle, ze do funkcji przekazesz argument przez referencje - czyli bardziej przystepnie mowiac "udostepnisz" adres zmiennej, na ktorej funkcja bedzie wykonywala operacje. W twoim pierwotnym przypadku przekazales do funkcji argument przez wartosc - w takim wypadku wewnatrz funkcji tworzona jest zmienna lokalna (o zasiegu tylko wewnatrz bloku{} funkcji ), a wartosc tej zmiennej kopiowana jest na podstawie podanego argumentu, czyli funkcja tworzy gdzies w pamieci zmienna, nadaje jej wartosc, ktora podales, wykonuje operacje, po czym "niszczy" ta zmienna przy wyjsciu z funkcji. Przekazujac argument przez wskaznik (*) lub poprzez referencje (&) funkcja bedzie operowala na zmiennej, ktora podasz jako argument. Roznica miedzy uzyciem tutaj wskaznika a referencji jest taka, ze (bez zaglebiania sie w bardziej precyzyjne tlumaczenie) jako referencje podajesz poprostu nazwe swojej zmiennej, bez dodatkowych znaczkow (poczytaj sobie na necie, wydaje mi sie, ze w kursie tez to powinno gdzies byc)
|
|
akwes |
» 2011-06-26 03:28:18 Jeżeli z referencją nie czujesz się dobrze (a wtedy ze wskaźnikami pewnie też) to da się na upartego zrobić to bez nich. Jednak jest to brudzenie w kodzie, robienie sobie złych nawyków, komplikowanie na siłę oraz zmniejszanie wydajności programu. Liczę że skutecznie odwiodłem Cię od metody, którą Ci zaraz przedstawię. #include <iostream>
void zwieksz( int ile ) { ile++; return ile; }
int main() { int ilosc = 0; ilosc = zwieksz( ilosc ); getchar(); return 0; }
Jednak, jeśli chcesz cokolwiek programować w c++ to zarówno z referencją oraz wskaźnikami zapoznać się prędzej czy później będziesz musiał. |
|
skovv |
» 2011-06-26 09:35:41 int zwieksz( int ile ) { ile++; }
int zwieksz2( int ile ) { ile++; return ile; }
int main() { int ilosc = 0; ilosc = zwieksz( ilosc ); std::cout << ilosc; ilosc = zwieksz2( ilosc ); std::cout << ilosc; getchar(); return 0; }
|
|
zupka Temat założony przez niniejszego użytkownika |
» 2011-06-26 10:37:23 jak juz wyzej pisalem dopiero zaczynam sie bawic :) wiec mam duzo przed soba, dziekuje za pomoc |
|
Mrowqa |
» 2011-06-26 10:38:59 int zwieksz( int & ile ) { return ++ile; }
Jak wyżej pisali - referencja ( znaczek & ) powoduje odebranie argumentu przez adres, a nie wartość. Dlatego co zrobimy w funkcji ze zmienną to stanie się to na niej, a nie na kopii w funkcji :) Rozumiesz ?? :D PS i wystarczy wtedy Pozdrawiam, Mrowqa[/code] |
|
zupka Temat założony przez niniejszego użytkownika |
» 2011-06-26 10:46:07 rozumiem rozumiem dziekuje jeszcze raz wszystkim za pomoc |
|
« 1 » |