Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Внешние (глобальные) переменные

Внешние переменные — это переменные, которые может использовать любая функция программы. В не- которых языках они носят название глобальных переменных. Для того чтобы создать внешнюю перемен- ную, ее следует определить перед функцией main():

int temp; main()

Здесь переменная temp определена как внешняя, так что с ней могут работать все функции, содержащие- ся в программе. Посмотрите на текст программы, приведенный в Листинге7.3. Переменная temp является внешней и ее используют функции main(), convert(), freeze() и boil(). Значение переменной, введенное в main(), используется при расчетах другими функциями. В программе присутствует еще одна переменная— celsius. Поскольку значение переменной celsius используется только функцией convert(), переменная оп- ределена внутри этой функции, являясь, таким образом, локальной переменной, которая не может ис- пользоваться нигде кроме convert().

Листинг 7.3. Программа, содержащая внешнюю переменную.

/*f_to_c.c*/ int temp; main()

{

convert()

printf("Введите значение температуры: "); scanf("%d", &temp);

convert(); freeze();

boil();

}

{

float celsius;

celsius = (5.0 / 9.0) * (temp - 32); printf("%d градусов по шкале Фаренгейта

соответствует %6.2f градусам \ по шкале Цельсия\n", temp, celsius); return(0);

}

freeze()

boil()

{

printf("Это составляет %d градусов

от точки замерзания воды\n", temp-32); return(0);

}

{

printf("Это составляет %d градусов

от точки кипения воды\n", 212-temp); return(0);

}

Если в программе одновременно присутствуют внешняя и локальная переменные с одним и тем же име- нем, функция, в которой определена локальная переменная, будет иметь доступ только к ней и не сможет использовать внешнюю переменную.

Статические переменные

Автоматические (локальные) переменные существуют только во время выполнения функций, в которых они определены. В момент начала работы функции для такой переменной резервируется память. Когда выполнение функции заканчивается, зарезервированная область памяти освобождается и переменная прекращает свое существование.

Если функция вызывается неоднократно, локальные переменные создаются столько раз, сколько вызовов данной функции имеется в программе, поэтому адреса этих переменных могут все время меняться. Соот- ветственно, и значения локальных переменных, хранящиеся в памяти, теряются каждый раз при завер- шении работы функции.

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

myfunc()

{

static int count;

}

Адреса хранения статических переменных остаются неизменными на протяжении всего времени выполне- ния программы. После прекращения работы функции память, закрепленная за переменной, не освобож-

дается, поэтому и записанное в ней значение переменной сохраняется. При следующем вызове этой же функции переменная будет иметь значение, оставшееся от предыдущего вызова. Запомните, что перемен- ная при этом остается локальной и имеет смысл только внутри своей функции.

Для того чтобы пояснить, что такое статическая переменная, рассмотрим следующий пример. Посмотрите на программу, приведенную в Листинге7.4. Вэтом фрагменте статические переменные не используются. Функция doit() вызывается четырежды, и каждый раз при этом двум переменным присваивается началь- ное значение 0, которое отображается с помощью функции printf(). Впроцессе работы функции, значение каждой переменной увеличивается на единицу. Однако значение переменных теряется после очередного завершения работы функции, а при следующем вызове им снова присваивается начальное значение0, так что результат работы программы выглядит так: