
fifalk [ fifalkowiec ]
c++ - jak zmienic wartosc parametru, ktory nie jest przekazywany przez r...
mam przykladowy program:
void zmien(int licz)
licz++;
void main()
int liczba;
cin>>liczba;
zmien(liczba);
cout<<endl<<liczba;
chodzi mi o to, jak zmienic wartosc zmiennej liczba, jesli parametr NIE jest przekazywany przez referencje. domyslam sie, ze trzeba zastosowac wskazniki, jednak nie wiem jak je w tym przypadku zastosowac.
odpada zmiana funkcji na taka, zeby parametry byly przekazywane przez referencje.
Esqualante [ Jyhad Baghadyr ]
void zmien(int * licz) //licz jest wskaznikiem
(*licz)++; //zmiana wartosci zapisanej pod adresem, ktory jest zzpisany we wskaźniku licz :]
void main()
int liczba
cin >> liczba;
zmian(&liczba); //przekazanie adresu zmiennej
cout << endl << liczba;
fifalk [ fifalkowiec ]
zle sie wyrazilem :-) generalnie chodzi mi o to, zeby lista parametrow pozostala nie zmieniona pod zadnym wzgledem - musi zostac void zmien(int licz).
jest to uproszczona wersja bardziej zlozonego programu, w ktorym lista parametrow roznych funckji musi byc taka sama, jednak raz musze te parametry przekazac przez referencje, a raz przez wartosc...
Esqualante [ Jyhad Baghadyr ]
Średnio rozumiem, o co Tobie chodzi...
Funkcja void zmien(int licz) nie zmieni wartosci liczby w mainie, bo licz jest kopią zmiennej liczba i operacje wykonywane są na kopii a nie na prawdziwej zmiennej.
Można zastosować przeciążenie funkcji -> poza istniejącą, przekazującą przez wartość, tworzy się funkcję o trochę innym prototypie (np void zmien(int * licz)). Wtedy, w zależności od parametrów zostaje wywołana odpowiednia funkcja, np
zmien(liczba) - powoduje wywolanie zwyklej funkcji.
zmien(&liczba) - powoduje wywolanie funkcji ze wskaznikiem w parametrze.

fifalk [ fifalkowiec ]
hmm.. o przeciazaniu nie pomyslalem, zaraz sprobuje
fifalk [ fifalkowiec ]
eee jednak dalej nie wiem jak sobie poradzic...
mam taki typ:
typedef void (*Funkcja)(int);
pozniej
Funkcja funkcja;
i teraz chce zeby bylo tak - raz funckja typu Funkcja zmienia wartosci zmiennych w mainie (podanych jako parametr), a raz nie. zaleznie od tego, jaka funkcje podstawie pod "funkcja".
jasniej? :-)
fifalk [ fifalkowiec ]
up?
fifalk [ fifalkowiec ]
moze jednak, ktos wie...? przedstaiwe problem jeszcze raz, inaczej:
mam typ:
typedef void (*Funkcja)(int);
pozniej:
Funkcja funkcja;
i 2 funkcje:
void fun1(int liczba);
void fun2(int &liczba);
jak rozwiazac problem, abym pod "funkcja" raz mogl podstawic "fun1", a innym razem "fun2"? czyli, zeby raz "funkcja" zmieniala wartosc zmiennej w mainie(), a raz, zeby tej wartosci nie zmieniala.