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

Переменные в функциях

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

Автоматические (локальные) переменные

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

printf("Для продолжения нажмите любую клавишу"); move_on = getchar();

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

pause()

{

int move_on;

printf("Для продолжения нажмите любую клавишу"); move_on = getchar();

return(0);

}

В данном случае переменная move_on является составной частью функции pause(). Переменную, которая определена внутри функции, принято называть локальной переменной для этой функции. Локальную пе- ременную можно использовать только внутри той функции, где она была определена. В языке Си пере- менные такого типа обычно называют автоматическими.

Задумайтесь над этим. Если вы определили переменную внутри какой-либо функции, то эта переменная имеет смысл только для данной функции. Сказанное справедливо и для переменных, определенных в функции main(). Посмотрите на программу

main()

{

int move_on; puts("Сообщения заполняют экран\n");

/*Здесь будет серия сообщений, которые заполнят экран*/ pause();

}

pause()

{

printf("Для продолжения нажмите любую клавишу"); move_on = getchar();

return(0);

}

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

Рис. 7.4. Автоматические переменные могут иметьодно и то же имя в разных функциях

Вследствие того, что автоматические переменные имеют смысл только внутри собственной функции, мож- но использовать одно и то же имя переменной в разных функциях. На рис.7.4 продемонстрирована пере- менная с именем age, которая определена и в функции main(), и в функции spouse(). Каждая переменная является автоматической (или локальной) для той функции, где ее определили, так что на самом деле в программе присутствуют две переменные с одинаковым именем. Каждая из них имеет собственное значе- ние, которое хранится в различных элементах памяти. Компилятор определяет, значение какой из пере- менных age должно быть отображено на экране, на основании того, в какой из функций помещена инст- рукция printf();. Выполняя функцию printf(), помещенную внутри spouse(), программа отобразит значение переменной age, определенной внутри этой функции. При выполнении инструкции printf(), помещенной внутри функции main(), она будет иметь дело с переменной age, определенной в main(). Таким образом, компилятор поддерживает одновременно две переменные с именем age.