Глобальные переменные.
Подобно статическим, глобальные переменные создаются один раз в начале работы программы, по-умолчанию они инициализируются нулем и существуют до конца выполнения программы. Но в отличие от статических переменных, которые видны только в той функции, в которой определены, глобальные переменные видны во всех функциях программного модуля.
Пример 4: Использование глобальных переменных.
Переменная g доступна как в функции main(), так и во всех других функциях программы.
#include "stdafx.h"
#include <windows.h>
#include <clocale>
int g=10; // глобальная переменная
void plus1() // определение функции plus1()
{ int p=10; // локальная переменная
g=g+1;
p=p+1;
printf("Плюс 1: g=%d\tp=%d\n",g,p);
}
void minus1() // определение функции minus1()
{ int m=10; // локальная переменная
g=g-1;
m=m-1;
printf("Минус 1: g=%d\tm=%d\n",g,m);
}
// вызывающая программа
int _tmain(int argc, _TCHAR* argv[])
{ setlocale(0,"Russian");
printf("начало: g=%d\n",g);
plus1();
plus1();
g++; // обращение к глобальной переменной g
printf("Середина: g=%d \n",g);
minus1();
minus1();
// локальные переменные здесь недоступны :
p++; // ошибка доступа!
m++; // ошибка доступа!
printf("Конец g=%d \n",g);
system ("pause");
return 0;
}
В результате работы программы, на экране будет напечатано :
Начало : g=10
Плюс 1: g=11 p=11
Плюс 1: g=12 p=11
Середина : g=13
Минус 1: g=12 m=9
Минус 1: g=11 m=8
Конец : g=11
Глобальная переменная g доступна из любой функции программы, включая функцию main(). К переменным p и m доступа из функции main()нет, этих переменных просто не существует в момент выполнения функции main().
Глобальные переменные по-умолчанию инициализируются нулем.
Локальные переменные по-умолчанию не инициализируются, поэтому в них всегда необходимо заносить начальные значения явно.
Статические переменные.
Статические переменные, определенные в теле функции сохраняют свои значения между вызовами. Следующий пример демонстрирует разницу между локальными и статическими переменными, определенными в функции.
. . .
int g=10; // глобальная переменная
void plus1() // определение функции plus1()
{ static int k=0; // статическая переменная (сохраняется)
int p=10; // локальная переменная (уничтожается)
g=g+1;
p=p+1;
printf("Плюс %d: g=%d\tp=%d\n",k,g,p);
}
int _tmain(int argc, _TCHAR* argv[])
{ setlocale(0,"Russian");
printf("начало: g=%d\n",g);
plus1();
plus1();
plus1();
. . .
}
В результате работы программы, на экране будет напечатано :
Начало : g=10
Плюс 1: g=11 p=11
Плюс 2: g=12 p=11
Плюс 3: g=13 p=11
. . .