Информатика -продвинутый курс




КЛАССЫ ПАМЯТИ - часть 3


блок 2, время существования -*/

/* время существования блока 2. */

printf("%d\n", i) ;

/* Программа напечатает i=2. */

{     /* Блок

уровня 3. */

i+=l; printf("%d\n", i);

/* Печатается самая внутренняя переменная с именем i,/*

/* которая после выполнения операции данного блока */

/* становится равной 3. */

}

/* Возвращение к блоку уровня 2. */

printf("%d\n", i) ;

/* Опять печатается i=3. */

)

/* Возвращение к блоку уровня 1. */

printf("%d", i) ;

/* Переменная i=3 исчезает. Теперь самой внутренней переменной */

/* с именем i будет i=l. */

)

Программа 104

#include<stdio.h>

int a;

main()

(

extern int a;

int P ();

a=6; P();

)

int P()

(

extern int a;

printf("a=%d",a);

}

Результат работы программы:

a=6

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

static <Спецификация типа> <Спецификация данных>;

На основании определения под объект отводится память и может быть произведена инициализация. Статические переменные можно инициализировать только выражениями с константами и с указателями на ранее описанные объекты.

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

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




Содержание  Назад  Вперед