Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

problem z funkcjami

Ostatnio zmodyfikowano 2011-06-26 10:46
Autor Wiadomość
zupka
Temat założony przez niniejszego użytkownika
problem z funkcjami
» 2011-06-25 17:57:54
C/C++
#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
P-34667
waxx
» 2011-06-25 18:12:01
C/C++
void zwieksz( int & ile )
{
    ile++;
}
P-34668
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)
P-34691
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ę.

C/C++
#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ł.
P-34694
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;
}
P-34696
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
P-34699
Mrowqa
» 2011-06-26 10:38:59
C/C++
int zwieksz( int & ile ) // zauważ znak & - znak referencji
{
    return ++ile; // najpierw zwiekszamy licznik, potem zwiekszona wartosc zwracamy :)
}

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
C/C++
zwieksz( ilosc ); // zamiast ilosc = zwieksz( ilosc ); :D

Pozdrawiam,
Mrowqa[/code]
P-34700
zupka
Temat założony przez niniejszego użytkownika
» 2011-06-26 10:46:07
rozumiem rozumiem dziekuje jeszcze raz wszystkim za pomoc
P-34701
« 1 »
  Strona 1 z 1