Sam przykład jest dość trywialny i nie wiem, jakie zastosowanie miałaby taka funkcja w Twoim programie, ale jeżeli chcesz zachować jej strukturę, to najłatwiej będzie przesyłać do niej wartość przez referencję (https://en.cppreference.com/w/cpp/language/reference) i wyglądałoby to tak:
void wypelnij(int& a)
{
a=5;
}
int main()
{
int a;
wypelnij(a);
printf("a=%d",a);
return 0;
}
Problem polega na tym, że jeżeli przekazujesz do funkcji zmienną, to tworzona jest jej kopia, która zostaje usunięta wraz z zakończeniem działania funkcji. Jeżeli miałbym zobrazować, jak działa Twój program, to wyglądałoby to mniej więcej tak:
- tworzysz zmienną a1
- przesyłasz a1 do funkcji wypełnij
- funkcja kopiuje zmienną a1 do zmiennej a2
- zmieniasz wartość a2
- funkcja się kończy, a zmienna a2 zostaje usunięta
- wyświetlasz zmienną a1
Jak widzisz, wartość zmiennej a1, przez cały czas trwania programu, nie zostaje zmieniona. To nazywa się przekazywaniem wartości przez zmienną (pass-by-value).
Używając referencji, nie kopiujemy oryginalnej zmiennej, lecz tworzymy do niej taki jakby alias, co pozwala nam operować na oryginalnej wartości (po bardziej szczegółowe wyjaśnienie zapraszam na https://en.cppreference.com/book/intro/reference). Kod. z użyciem referencji. działałby następująco:
- tworzysz zmienną a1
- przesyłasz a1 do funkcji wypełnij
- funkcja tworzy referencję a2 do zmiennej a1
- zmieniasz wartość a1, używając jej aliasu a2
- funkcja się kończy, a referencja a2 zostaje usunięta
- wyświetlasz zmienną a1
W tym przypadku wartość a1 zostaje zmieniona. To nazywa się przekazywaniem wartości przez referencje (pass-by-reference).