|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Область действия переменныхВ языке Си нет ключевого слова, указывающего область действия (видимости) объекта. Область действия определяется местоположением декларации объекта в файле исходного текста программы. Напомним общую структуру исходного текста программы: <директивы препроцессора> <описание глобальных объектов> <заголовок функции> { <описание локальных объектов> <список инструкций> } Файл исходного текста может включать любое количество определений функций и/или глобальных данных. Параметры функции являются локальными объектами и должны отличаться по идентификаторам от используемых в коде функции глобальных объектов. Локальные объекты, описанные в коде функции, имеют приоритет перед объектами, описанными вне функции, например: #include<stdio.h> int f1(int); int f2(int); int f3(int); int n; // Глобальная n void main (void) { int i=2; // Локальная i =2 n=3; // Глобальная n =3 i = f1(i); // Обе переменные i – локальные printf(" 1: i=%d, n=%d\n",i,n); // i =7, n =3 n = f1(i); // n – глобальная, i – локальная printf(" 2: i=%d, n=%d\n",i,n); // i =7, n =12 i = f2(n); // i и n – локальные printf(" 3: i=%d, n=%d\n",i,n); // i =15, n =12 i = f3(i); // Обе переменные i – локальные printf(" 4: i=%d, n=%d\n",i,n); // i =29, n =14 } //––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– int f1(int i) { // Параметр функции i – локальная int n = 5; // n – локальная n+=i; return n; } //––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– int f2(int n) { // Параметр функции n – локальная n+=3; return n; } //––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– int f3(int i) { n+=2; // n – глобальная return i+n; }
Существуют следующие области действия: блок, файл, функция, прототип функции, область структурированных типов данных. Блок. Идентификаторы, описанные внутри блока, являются локальными. Область действия идентификатора начинается в точке определения и заканчивается в конце блока, видимость – в пределах блока и внутренних блоков, время жизни – до выхода из блока. После выхода из блока память освобождается. Файл. Идентификаторы, описанные вне любого блока, функции, класса или пространства имен, имеют глобальную видимость и постоянное время жизни и могут использоваться с момента их определения. Функция. Единственными идентификаторами, имеющими такую область действия, являются метки операторов. В одной функции все метки должны различаться, но могут совпадать с метками других функций. Прототип функции. Идентификаторы, указанные в списке параметров прототипа (декларации) функции, имеют областью действия только прототип функции. Структурированный тип данных. Элементы структур и объединений являются видимыми лишь в их пределах. Они образуются при создании переменной указанного типа и разрушаются при ее уничтожении. В языке С++ допускается в разных блоках программы использовать один и тот же идентификатор для разных объектов. Декларация такого идентификатора внутри блока скрывает доступ к ранее объявленному, например: void main(void) { int a = 3; printf(“\n Block 1: %d “, a); { double a = 2.5; printf(“\n Block 2: %lf “, a); { char a = ‘A’; printf(“\n Block 3: %c “, a); } printf(“\n New Block 2: %lf“, a+1.25); } printf(“\n New Block 1: %d“, ++a); } Результат программы: Block 1: 3 Block 2: 2.5 Block 3: A New Block 2: 3.75 New Block 1: 4
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |