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



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


По умолчанию (если не задана инициализация) внешние объекты получают нулевые начальные значения.

Внешние объекты делятся на внешние глобальные и внешние статические.

Важно различать описание внешнего объекта и его определение. Описание указывает свойства объекта (тип, размеры и т.д.); определение же вызывает еще и отведение памяти установке начального значения, если используется инициализация.

Например, появившиеся вне определения какой-либо функции строчки

int max;

char save[maxline];

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

extern int max;

extern char save[];

описывают в остальной части данного блока переменную max как int, a save как массив типа char (размеры которого указаны в другом месте), но не создают переменных и не отводят для них места в памяти.

Во всех блоках, составляющих исходную программу, должно содержаться только одно определение внешней переменной; другие блоки могут содержать описания extern для доступа к ней.

Программа 103

#include<stdio.h>

int i=0;

/* Класс памяти переменной - внешний. Область действия переменной -любая программа, */

/* загружающаяся с данным файлом. Время существования i=0 - все время выполнения программы. */

main()                                              /* Блок уровня 1. */

(

auto int i=l;

/* В блоке 1 область действия i=l - функция main(). Время */

/* существования i=l - все время выполнения главной функции /*

/* main(). /*

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

/* Если две переменные имеют одно и то же имя, то по этому */

/* имени обращаются к внутренней переменной, внешняя */

/* непосредственно недоступна, поэтому после выполнения */

/* блока 1 программа напечатает i=l. */

{     /* Блок уровня 2. */

int i=2;

/* Класс памяти переменной i=2 - auto. Область */

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

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


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