Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 12 лет назад пользователемlegach.ntl.nnov.ru
1 ЛЕКЦИЯ 7 КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ ОБЪЕКТОВ
2 Класс памяти определяет: область действия переменной; время, в течение которого переменная может сохранять свое значение. Классы памяти: - автоматические (внутренние auto), - внешние (extern), - статически внутренние и - статически внешние (static) - регистровые (register)
3 Автоматические переменные main ( ) { int x; //по умолчанию x,y int y; //являются автоматическими } main ( ) { auto int x; //явно подчеркнуто с помощью auto int y; //ключевого слова auto... } Ключевое слово auto программистами редко используется. В каждой функции программы имеются свои автоматические переменные, которые создаются во время вызова функций и уничтожаются при выходе их функции. Для этого используется стек памяти.
4 Регистровые переменные (локальные, автоматические) register int count; Объекты хранятся в быстродействующей памяти - регистрах процессора register int x; x=0xff; scanf(%d,&x); // неверно Подсказка, а не требование Если применяется цикл for, то компилятор сам может принять решение использовать регистр для отслеживания изменения индекса
5 Внешние переменные Описываются с помощью ключевого слова extern, доступны во всех файлах программы, существуют постоянно все время работы программы. ЗАМЕТИМ: функция автоматически видна во всех модулях программы.
6 //файл file1.cpp int x, y; //объявление глобальных переменных main ( ) {… } fun1 {..... } //файл file2.cpp extern int x; //объявление внешней переменной, //созд-е ссылки на внешний объект fun 2 ( ) {..... x++; }
7 Статические переменные (Static) Доступны только внутри функции, в которой они описаны, но существуют все время работы программы, сохраняя свои значения между вызовами функции.
8 void fun() {int x=1; // static int y=1; printf("%d %d\n",x++,y++); } X Y Внутренняя статическая void fun(); void main() {int i; printf("X Y\n"); for(i=1;i
9 2. Внешние статические переменные Описывается вне функции с использованием ключевого слова static. Используется только функциями файла, в которых она описана, причем только после описания переменной. Компилятор резервирует фиксированный блок памяти под внешние и статические переменные и они доступны программе на протяжении всего времени ее работы. !
10 Класс памяти Ключ. слово Время жизни Место опис-я Область дейст-я Автомат-йAutoВременноЛок-явнутри блока Регистро вый Register ВременноЛок-явнутри блока Статич. внутр-й StaticПостоян.Локаль ная внутри блока Внеш- ний Extern Постоян.Глоб. (все файлы) вне блока Внеш. Статиче- ский Static Постоян. Глоб. (один файл) вне блока
11 Инициализация переменных и массивов Постоянная переменная или массив инициализируется нулями (статические и внешние). Если часть элементов массива получает значения в процессе работы программы, то оставшаяся часть либо мусор (внутренняя переменная), либо нули (внешняя). Если часть элементов массива получает значения при инициализации, то оставшиеся элементы инициализируются нулями соответствующих типов. Значения временных переменных и временных массивов не определены (содержат мусор).
12 int x; //x = 0 float y [5]; //y [0] = 0.0,..., y [4] = 0.0 float *pnt; // pnt = 0 char mas [4] //mas [0] = \0, …, mas [3] = \0 main ( ) {…..} int x; //x = 0 float y [5]; //y [0] = 0.0,..., y [4] = 0.0 float *pnt; // pnt = 0 char mas [4] //mas [0] = \0, …, mas [3] = \0 main ( ) {…..}
13 Поименованные области Объявление поименованной области или пространства имен имеет вид namespase [имя области] { объявления } и определяет пространство имен функций, классов и переменных, находящихся в отдельной области видимости. Препятствует конфликту имен объектов, объявленных в разных местах программы.
14 namespase one { int i, j; float x, y; int fun1 (int, int); void func2 ( floit *); } namespase two { int x, y; float fun1 (float *); void func2 ( float *);//При этом прототипы //func2 одинаковые, а реализации разные }
15 Расширим поименованную область: namespase one { int k, n, m; //объявл. новых переменных float fun1 (float, float); //перегрузка функ-и fun1 void fun3 ( int *, int); //объявл. новой функции } float one : : fun1 (float, float) //опред. функции {... } one : : i = 1; //опред. переменной one : : fun1(1.5, 10); //вызов функции
16 Можно объявить объект доступным вне своего пространства с использованием оператора using, после чего объект можно использовать без явного указания имени области: using one : : i; i = 10; Напомним: char str[40]; int func( ) { char str;... str = A; : : str = string ; } Использование операции области видимости
17 ВСЕ
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.