Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_4.doc
Скачиваний:
21
Добавлен:
05.06.2015
Размер:
124.93 Кб
Скачать

Использование переменных в функции. Локальные переменные.

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

Пример 2: Функция находит максимальное значение из двух целых чисел

. . .

int max (int a, int b) // a, b - формальные параметры

{ //------------------------ тело функции

int r; // локальная переменная r

if (a>=b) r=a;

else r=b;

return (r); // Возврат результата

}

void main()

{ 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);

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

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

Пример 3:Использование статических переменных в определении функции.

#include <stdio.h>

// определение функции plus1()

voidplus1()

{staticintx=0;//инструкция выполняется один раз

inty=0; // выполняется при каждом вызове

x=x+1;

y=y+1;

printf("x=%d , y=%d \n",x,y);

} // переменная y уничтожается, переменнаяxсохраняется

voidmain()

{plus1();

plus1();

y++; // переменнойy уже нет (будет ошибка!)

plus1();

x++; // переменнаяхсуществует, но не видна здесь (будет ошибка!)

}

Инструкция х=0(в теле функции) выполняется только один раз, при первом вызове функцииplus1().Посколькупеременная х сохраняется ,происходит её увеличение на единицу при каждом вызове функции.

Локальная переменная yсоздается каждый раз заново при вызове функцииplus1(), при выходе из функции она уничтожается, и поэтому её значение не сохраняется между вызовами функции.

В результате работы программы, на экране будет напечатано :

При 1-ом вызове х=1, y=1

При 2-ом вызове х=2, y=1

При 3-ем вызове х=3, y=1

Глобальные переменные.

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

Пример 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=11p=11

Плюс 1: g=12p=11

Середина : g=13

Минус 1: g=12m=9

Минус 1: g=11m=8

Конец : g=11

Глобальная переменная gдоступна из любой функции программы, включая функциюmain(). К переменнымpиmдоступа из функцииmain() нет, этих переменных просто не существует в момент выполнения функцииmain().

Глобальные переменные по-умолчанию инициализируются нулем.

Локальные переменные по-умолчанию не инициализируются, поэтому в них всегда необходимо заносить начальные значения явно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]