Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika_1semestr.docx
Скачиваний:
304
Добавлен:
29.03.2016
Размер:
377.62 Кб
Скачать

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

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

Локальные переменные существуют только во время выполнения программного блока, в котором они объявлены, создаются они при входе в блок, а разрушаются — при выходе из него. Более того, переменная, объявленная в одном блоке, не имеет никакого отношения к переменной с тем же именем, объявленной в другом блоке.

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

inti,j; /*  У первой функции видныi,jфайлового уровня.  Кроме того, у нее есть формальный параметрk и локальная переменнаяresult  В процессе работы эта функция изменяет значение файловой переменнойi*/intf1(intk) {  intresult;  result=i*j+k;  i+= 100;  returnresult; }

/*  Во второй функции имя формального параметра совпадает с именем переменной i файлового уровня, при работе   используется параметр, а не файловая переменная. */ int f2(int i)

{   /* i - параметр, j - файловая */   return i*j;

}

/*  С третьей функцией аналогичная ситуация, что и со второй.  Только на этот раз маскируется файловая переменная j,  и не формальным параметром, а локальной переменной. */ int f3(int k)

{   int j;   j=100;   /* i - файловая, j - локальная */   return i*j + k;

}

Переменная j самого внутреннего блока  маскирует не только файловую, но и локальную переменную из  внешнего блока. */ int f4 (int k)

{   /* Объявляем переменную и сразу инициализируем */   int j=100;   {     /*   Объявляем еще одну локальную с тем же именем,  что у файловой и локальной из внешнего блока */ int j=10;     /*   i - файловая, j - локальная, причем из    внутреннего блока  */     return i*j + k;   }

}

Необходимость инициализации переменных (автоматические переменные)

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

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

!!! ИНИЦИАЛИЗАЦИЯ ДО ИСПОЛЬЗОВАНИЯ!!!

/* Файловая переменная без инициализации, будет равна 0 */ int s; int f() {   /* Локальная без инициализации, содержит "мусор" */   int k;   return k; } int main() {   printf("%d\n", s); /* Всегда печатает 0 */   /* Невозможно предсказать, что увидим */   /* К тому же числа могут быть разными */   printf("%d\n", f());   ...;   printf("%d\n", f());   return 0;

Соседние файлы в предмете Информатика