Czemu funkcja przypisuje nowe wartości do zmiennych globalnych ?
Ostatnio zmodyfikowano 2015-11-17 10:30
maciaas87 Temat założony przez niniejszego użytkownika |
Czemu funkcja przypisuje nowe wartości do zmiennych globalnych ? » 2015-11-17 09:27:59 Witam, Mam pytanie odnośnie funkcji. Wartości globalne 6 różnych zmiennych wynoszą zero. W funkcji main wywołuje pierw funkcje1 -> przypisanie wartości odbywa się zgodnie z moim tokiem rozumowania, czyli na początku wypisuje na ekran wartości zmiennych globalnych, potem następuje zmiana tych wartości lokalnie wewnątrz funkcji, a następnie wypisanie nowych wartości na ekran. potem w mainie wywołuje funkcje2 - > i tu zaczyna się problem. nie ma nigdzie referencji, a program zamiast wyświetlić na początku wartości zmiennych globalnych (czyli zera), to wyświetla wartości, które zostały przypisane do zmiennych w funkcji1. Sytuacja analogicznie powtarza się przy wywołaniu funkcji3. Mam nadzieję, że w miarę czytelnie napisałem na czym dokładnie polega mój problem. Po prostu program zachowuje się jak bym np w środku funkcji1 wywoływał funkcje2, a w funkcji2 wywoływał funkcje3... Z tego co wynikało z informacji dostępnych w kursie c++ w dziale o funkcjach, to przypisanie nowych wartosci zmiennym w {środku funkcji} nie ma prawa zmieniać wartości zmiennych poza klamrą. Proszę o pomoc. ( jest to troszkę zmodyfikowane zadanie z symfonii grębosza, ale dotyczy równiez zagadnienia kursu cpp0x). #include <iostream>
using namespace std;
int liczba1; char znak1; double liczba3;
int liczba2; char znak2; double liczba4;
void funkcja2(); void funkcja3();
void funkcja1() { cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2; liczba1 = 20; liczba2 = 40; liczba3 = 0.2; liczba4 = 0.4; znak1 = 'K'; znak2 = 'o'; cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2 << endl; }
void funkcja2() { cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2; liczba3 = 154; liczba4 = 168; liczba1 = 243; liczba2 = 323; znak1 = 'n'; znak2 = 'r'; cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2 << endl; }
void funkcja3() { cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2; liczba3 = 1111; liczba4 = 1213; liczba1 = 4536; liczba2 = 4534; znak1 = 'a'; znak2 = 'd'; cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2 << endl; }
int main() { funkcja1(); funkcja2(); funkcja3(); }
jeśli w mainie po wywołaniu funkcji3, wypisze coś takiego: cout << "\nLiczba1 = " << liczba1 << "\nLiczba2 = " << liczba2 << "\nLiczba3 = " << liczba3 << "\nLiczba4 = " << liczba4 << "\nZnak1 = " << znak1 << "\nZnak2 = " << znak2; to również wyświetli nie wyświetli mi ZER, tylko wartości przypisane funkcja3. |
|
1aam2am1 |
» 2015-11-17 09:58:19 Gdy mamy int zmienna = 0;
{ int zmienna; zmienna = 5; std::cout << zmienna << std::endl; }
std::cout << zmienna << std::endl;
Ale ty nie tworzysz nowych zmiennych tylko edytujesz globalne a to jest normalne zachowanie. |
|
maciaas87 Temat założony przez niniejszego użytkownika |
» 2015-11-17 10:30:17 dzięki bardzo za pomoc :) |
|
« 1 » |