[C++]Funkcja zmieniająca wartość obiektu

RondelDurszlak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 23 sty 2016, o 18:46
Płeć: Mężczyzna
Lokalizacja: Szuflada

[C++]Funkcja zmieniająca wartość obiektu

Post autor: RondelDurszlak »

Witam wszystkich. Mam mały problem z funkcją void. Chcę żeby wykonywała operację na zmiennej bool win, jednak tego nie robi - na wyjściu chcę dostać 1, a konsola wypluwa 0.

Kod: Zaznacz cały

#include<iostream>
using namespace std;
void bul(bool bul)
{
    bul=1;
    return;
}

int main(){
bool win=0;
bul(win);
cout<<win;
}
Co ciekawe, jeśli zmienna bool win zadeklaruję jako tabelę to moja funkcja bul będzie działała i na wyjściu dostaniemy 1.

Kod: Zaznacz cały

#include<iostream>
using namespace std;
void bul(bool bul[])
{
    bul[0]=1;
}

int main(){
bool win[1]={0};
bul(win);
cout<<win[0];
}
Ktoś wyjaśni, pomoże?
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C++]Funkcja zmieniająca wartość obiektu

Post autor: Andreas »

Funkcja void nic nie zwraca.
Jedyne co robi obecnie twoja funkcja to tworzy nową zmienną "bul", podstawia pod nią to co dostała (czyli co to było w zmiennej win), potem podstawia pod tą zmienną 1 i usuwa ją.
Zmienna "bul" w twojej funkcji jest zmienną lokalną i żyje tylko w czasie wykonywania funkcji.
Jeśli chcesz żeby funkcja modyfikowała zmienną win, to musisz przekazać argument funkcji przez referencję, czyli tak:

Kod: Zaznacz cały

void bul(bool& bul)
Więcej o tym możesz poczytać tu:
... encj.C4.99

W twoim pierwszym programie jest tworzona lokalna kopia zmiennej. W drugim programie nie jest, bo tablice jako argument funkcji zawsze są przekazywane przez referencję - nie są tworzone kopie tablicy w pamięci tak jak to się dzieje w przypadku pojedynczych zmiennych.
ODPOWIEDZ