Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Czemu funkcja przypisuje nowe wartości do zmiennych globalnych ?

Ostatnio zmodyfikowano 2015-11-17 10:30
Autor Wiadomość
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).



C/C++
#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:
C/C++
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.
P-140268
1aam2am1
» 2015-11-17 09:58:19
Gdy mamy
C/C++
int zmienna = 0;

{
    int zmienna; //nakrycie zmiennej globalnej
   
    zmienna = 5;
   
   
    std::cout << zmienna << std::endl; //5
} //zmienna lokalna jest usuwana

std::cout << zmienna << std::endl; //0

Ale ty nie tworzysz nowych zmiennych tylko edytujesz globalne a to jest normalne zachowanie.
P-140269
maciaas87
Temat założony przez niniejszego użytkownika
» 2015-11-17 10:30:17
dzięki bardzo za pomoc :)
P-140270
« 1 »
  Strona 1 z 1