Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций(ОАиП).doc
Скачиваний:
70
Добавлен:
11.05.2015
Размер:
1.07 Mб
Скачать

16.4. Область действия переменных

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

Напомним общую структуру исходного текста программ на языке С:

<директивы препроцессора>

<описание глобальных объектов>

<заголовок функции>

{

<описание локальных объектов>

<список инструкций>

}

Файл исходного текста может включать любое количество определений функций и/или глобальных данных.

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

. . .

int n; // глобальное n

void main (void) {

int i;

...

f1(i);

...

f2(n); // локальное n

}

f1(int i) {

...

i=n; // глобальное n

...

}

f2(int n) {

int i;

...

i=n; // локальное n

...

}

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

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

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

void main(void) {

int i = 3;

cout << “\n Block 1 - “ << i ;

{

float i = 2.5;

cout << “\n Block 2 - “ << i ;

{

char i = ‘a’;

cout << “\n Block 3 - “ << i ;

}

}

cout << “\n New Block 1 - “ << ++i ;

getch();

}

В результате выполнения этой программы, на экране получим:

Block 1 - 3

Block 2 - 2.5

Block 3 - a

New Block 1 - 4

17. Структуры, объединения, перечисления

17.1. Структуры

Структура это составной объект языка Си, представляющий собой совокупность логически связанных данных различного типа, объединенных в группу под одним идентификатором (ID). Данные, входящие в эту группу называют полями.

Термин «структура» в языке Си соответствует двум разным по смыслу понятиям:

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

- структура – это правила формирования структурной переменной, которыми руководствуется компилятор при выделении ей места в ОП и организации доступа к ее полям.

Определение объектов типа структуры производится за два шага:

- декларация структурного типа данных, не приводящая к выделению участка памяти;

- определение структурных переменных с выделением для них памяти.