Cześć. Mam pytanie, jak to w końcu z tą referencją jest bo rozumiem, bardzo prosto - referencją zmieniamy oryginał (nie wysyłamy kopii tylko inną nazwę, ale ta nazwa wskazuje na miejsce oryginału i na nim bazujemy.
Jeśli wysyłamy normalnie to pracujemy na kopii. To czemu w tym programie jak wysyłam tablicę (jako kopię, nie referencję) to każda z funkcji coś w niej zmienia, a wszystko jest jakby działo się na oryginale. Dokładniej opiszę:
1. wysyłam do funkcji wylosujLiczby() kopię tablicy, w tej kopii dokonywane jest wpisywanie liczb, funkcja nawet nic nie zwraca.
2. znów wysyłąm kopię tablicy do funkcji wypiszLiczby(), skąd ta funkcja ma dane z wylosujLiczby() skoro kopia jest znana tylko w granicy danej funkcji?
3. funkcja obliczSume() znowu ma dostęp do kopii, która była edytowana w pierwszej funkcji, więc jakim cudem oblicza te sume?
Kod niżej:
#include <cstdlib>
#include <ctime>
using namespace std;
void wylosujLiczby(int t[], int r, int start, int zakres)
{
srand( time( NULL ) );
for(int i=0;i<r;i++){
t=(rand() % zakres) + start;
}
}
void wypiszLiczby(int t[], int r)
{
for(int i=0;i<r;i++){
cout << "[" << i << "] = " << t << endl;
}
cout << endl;
}
int obliczSume(int t[], int r)
{
int suma;
for(int i=0;i<r;i++){
suma+=t;
}
return suma;
}
int main()
{
int tablica[ 999 ];
wylosujLiczby( tablica, 999, 4, 7 );
wypiszLiczby( tablica, 999 );
int iSuma = obliczSume( tablica, 999 );
cout << "Suma liczb wynosi: " << iSuma << endl;
return 0;
}