
- •Лабораторная работа №5
- •Использование переменных в функции. Локальные переменные.
- •Статические переменные
- •Глобальные переменные.
- •Динамическое выделение памяти
- •Работа с динамической памятью в с
- •Проверка на выделение памяти
- •Выделение памяти под одномерный динамический массив
- •Двумерные динамические массивы
- •1Ый способ
- •2Ой способ
- •Типичные ошибки при работе с динамической памятью
- •Примеры программирования
- •Контрольные вопросы
Лабораторная работа №5
Локальные, глобальные, статические переменные.
Работа с динамическими массивами.
Обработка одномерных и многомерных динамических массивов.
Цель работы:
Изучить методы работы c динамической памятью
Познакомиться с новыми понятиями: время жизни и область видимости переменных.
Получить навыки работы с локальными и глобальными переменными
Лабораторное задание
Изучить теоретическую часть лабораторной работы и материалы из папки «примеры из лекций»
Изучить примеры программирования и выполнить их на компьютере.
Выполнить задание (номер варианта соответствует номеру компьютера).
Разработать и записать алгоритм решения
Написать программу, реализующую разработанный алгоритм, используя динамические массивы
Теоретические сведения
Введем несколько новых понятий, которые тесно связаны с использованием функций – это время жизни и область видимости программных объектов.
Время жизни и область видимости переменной.
Время жизни и область видимости переменной связаны с блоком программы, в языке С различают два вида программных блоков:
составной оператор;
определение функции.
Время жизни переменной - это интервал времени выполнения программы, в течение которого переменная существует. Время жизни переменной может быть локальным или глобальным.
Глобальная переменная существует на протяжении всего времени выполнения программы.
Локальная переменная существует только во время выполнения блока, в котором она определена.
Область видимости переменной -это та часть программы, в которой к ней можно обратиться (в которой переменная доступна).
Переменная может быть видима в пределах:
блока;
модуля (файла);
во всех модулях (если программа располагается в нескольких файлах).
Время жизни и область видимости переменной зависят от того, в каком месте программы (на каком уровне) переменная объявлена.
Если переменная объявляется вне всех блоков программы(обычно вначале программы, до функцииmain()),то это внешнее объявление (глобальная переменная).
Внутри блока или функции объявляются локальные переменные.
При каждом входе в блок (или функцию) локальная переменная создается (для неё выделяется память), а при выходе из блока переменная уничтожается.
Пример 1:
…
int q=0; // глобальная переменная q (объявлние вне блоков)
int _tmain(int argc, _TCHAR* argv[])
{int i=0; // локальная переменная функции main()
q++; // глобальные переменные доступны во всех блоках и функциях
{ // _____________начало вложенного блок
int k=0,l=0; // локальные переменные вложенного блока
i++; // локальные переменные из объемлющего блока (функция main) доступны во вложенном блоке
q++; // q, k, l : все три переменных доступны
k++;
l++;
}//_____________конец вложенного блок
k++; // ошибка при трансляции !!! переменной k уже нет
…
Использование переменных в функции. Локальные переменные.
Переменные, определенные в теле функции – это локальные переменные. Область видимости такой переменной – функция, к ней могут обращаться только операторы тела функции. Время жизни такой переменной от входа до выхода из функции, при входе в функцию – переменная создается, а при выходе из функции – уничтожается.
Пример 2: Функция находит максимальное значение из двух целых чисел
. . .
int max (int a, int b) // a, b - формальные параметры
{ //------------------------ тело функции
int r; // локальная переменная r
if (a>=b) r=a;
else r=b;
return (r); // Возврат результата
}
int _tmain(int argc, _TCHAR* argv[])
{int x=4, y=10, big;
// Вызов функции max, x,y - фактические параметры
big = max (x,y);
printf ("big=%d\n", big); // big=10
printf ("r=%d\n", r); // ошибка, переменной r уже нет!!!
…
При вызове формальные параметры функции max() инициализируются фактическими значениями :a =4 b =10
После окончания работы возвращаемое значение передается в точку вызова функции, значение локальной переменной r, возвращенное функциейmax ()возникает справа от знака присваивания в оператореbig = max (x,y);