Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

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

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

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

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

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

main() { intmove_on; puts("Сообщения заполняют экран\n");/*Здесь будет серия сообщений, которые заполнят экран*/ pause(); } pause() { printf("Для продолжения нажмите любую клавишу"); move_on = getchar(); return(0); }

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


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

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





Поделиться с друзьями:


Дата добавления: 2017-03-12; Мы поможем в написании ваших работ!; просмотров: 209 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2510 - | 2261 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.