On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Функции, часть 2 - локальные и глобальные переменные

А. Согомонян

В функциях можно объявлять свои переменные, эти переменные называются локальными, то есть могут использоваться только в функции в которой объявлены. При выходе из функции они уничтожаются.Вот пример:
int main()
{
int i=1;
return 0;
}
void afunc()
{
int i=2;
}

компилятор при этом ничего типа [Error: redeclaration of `int i'] не скажет. В main() у нас своя перемення i а в afunc() своя, никакого отношения друг к другу они не имеют.
Если же объявить переменную вне всяких функций (такие переменные называются глобальными) то её можно использовать во всех функциях без объявления, т.е.
int i=0;
int main()
{
i=3;
return 0;
}
void afunc()
{
i=5;
}

тут уже любые действия над переменной в одной функции значимы для другой, то есть в данном случае в функции afunc() до присвоения i 5 значение i будет 3 а не 0.
Глобальную переменную можно использовать в функции только если в функции не объявлена та же преременная. Если же она объявлена то она локальна, т. . е глобальную функция 'не видит'.
#include <iostream.h >
int i=1;
int main()
{
int i;
i=2;
cout<<"i in main(): "<<i<<endl;
return 0;
}
void afunc()
{
cout<<"i in afunc(): "<<i;
}

результат:
i in main(): 2
i in afunc(): 1

это значит что в main() у нас своя локальная переменная i , а afunc() использует глобальную так как в ней i не объявлена.

А вот ещё один случай, когда в одной функции можно использовать и локальную и глобальную переменные:
#include <iostream.h>
int i=1;
int main()
{
int i;
i=2;
cout<<"i local: "<<i<<" i global: "<<::i;
return 0;
}

получим:
i local: 2 i global: 1
:: перед переменной значит что нам нужна глобальная переменная.

Аргументы функции передаются в функцию как значения, то есть они являются локальными переменными. Это значит что при передаче аргументов в функцию создаются их локальные копии с которыми работает функция, то есть если в функции вы изменяете значение аргумента то изменяется не переменная которую певредали функции в качестве аргумента а её локальная копия.
вот пример:
#include <iostream.h>
void func(int x,int y);
int main()
{
int x=1,y=2;
cout<<"main(): x="<<x<<" y=" <<y<<endl;
func(x,y);
cout<<"main(): x="<<x<<" y=" <<y<<endl;
return 0;
}

void func(int x,int y)
{
cout<<"func(): x="<<x<<" y=" <<y<<endl;
x=3;
y=4;
cout<<"func(): x="<<x<<" y=" <<y<<endl;
}

результат выполнения:
main(): x=1 y=2
func(): x=1 y=2
func(): x=3 y=4
main(): x=1 y=2

Чтоб функция имела возможность изменить переданную ей в качестве аргумента переменную надо передать переменную с помощью указателя или ссылки, но об этом потом :].



Литература по Microsoft Visual Basic