Оцените презентацию от 1 до 5 баллов!
Тип файла:
ppt / pptx (powerpoint)
Всего слайдов:
14 слайдов
Для класса:
1,2,3,4,5,6,7,8,9,10,11
Размер файла:
413.50 kB
Просмотров:
48
Скачиваний:
1
Автор:
неизвестен
Слайды и текст к этой презентации:
№1 слайд
Содержание слайда: Введение в С++
Структуры, препроцессор, динамическая память
№2 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Структуры
Формат: struct <имя-структуры> { <список-полей> } ;
struct <имя-структуры> <описатели-переменных> ;
struct [<имя-структуры>] { <список-полей> } <описатели-переменных> ;
Аналоги структур в реальной жизни – различные формуляры, анкеты, учетные карточки.
Существует два способа доступа к полям структурных переменных:
<имя-структурной-переменной> . <имя-поля>
<указатель-на-структурную-переменную> -> <имя-поля>
Пример: электронная картотека для домашней библиотеки
struct form {
char *ptitle; наименование книги
char *pauthor; автор
float price; стоимость
} ;
struct form books [ 1024 ] ; картотека есть массив структур
struct form *pbook = books ; указатель на массив структур
№3 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Разработаем getprice – функцию для поиска книги в картотеке
по её названию и выдачи стоимости книги.
Вариант 1 – используем индексы
Вариант 2 – используем адресную арифметику
№4 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Битовые поля
Рассмотрим структуру специального вида:
struct {
unsigned field_1 : 3 ;
unsigned field_2 : 3 ;
unsigned : 2 ;
unsigned mask : 8 ;
} fields ;
Работа с битовыми полями по именам:
fields.field_1 = 0;
fields.field_2 = 07;
fields.mask ^= fields.mask;
Именованные битовые поля используются для экономии памяти
и для работы с аппаратными регистрами.
№5 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Объединения
Формат: union <имя-объединения> { <список-полей> } ;
union <имя-объединения> <описатели-переменных> ;
union [<имя-объединения>] { <список-полей> } <описатели-переменных> ;
Объединения – это такие структуры, в которых поля накладываются друг на друга.
Примеры:
№6 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Определение типа
Формат: typedef <спецификация-типа> <описатели> ;
Примеры:
№7 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Препроцессор
Препроцессор есть текстовый процессор, который просматривает
исходный текст до компиляции и решает три задачи:
обрабатывает символические имена;
отыскивает и вставляет файлы;
осуществляет условную компиляцию.
Директивы #define и #undef
формат: #define <имя> <текст>
#define <имя> ( <список-параметров> )<текст> // это макрос
#undef <имя>
примеры:
#define LENGTH 80
#define ABS (x) ( (x) >0 ? (x) : -(x) )
#define MAX (x, y) ( (x) > (y) ? (x) : (y) )
Зачем нужны скобки? Потому что возможны побочные эффекты, например
#define MAX (a, b+c) ( a > b + c ? a : b + c )
#define ABS ( ++p ) ( ++p >0 ? ++p : -++p )
№8 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Директива #include
формат: #include <имя-пути>
#include “имя-пути”
примеры:
#include <iostream> // ищет файл в стандартных директориях
#include “c:file1.h” // ищет файл в конкретной директории
#include “file2.h” // ищет файл в текущей директории
Условная компиляция реализуется с помощью следующих директив:
#if #elif #else #endif defined undef
формат: #if <константное-выражение-1> [ <текст-1> ]
[ #elif <константное-выражение-2> [ <текст-2> ] ]
[ #elif <константное-выражение-3> [ <текст-3> ] ]
………………………………..
[ #else [ <текст-n> ] ]
#endif
Такие конструкции часто используются при инсталляции и настройке
программных продуктов.
№9 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
пример:
#if ( sizeof (void* ) == 2 ) #define _SMALL_
#elif ( sizeof (void* ) == 4 ) #define _LARGE_ // модель памяти
#else printf ( “ ? “) ;
#endif
пример:
#if ( defined ( _SMALL_) && undef ( _LARGE_ ) )
#include “file.h”
#endif
Популярные макросы для работы с символами находятся в файле <ctype.h>:
isalpha ( c ) - символ есть буква?
isdigit ( c ) - символ есть цифра?
isalnum ( c ) - символ есть буква или цифра?
isspace ( c ) - пробельный символ (пробелы, табуляция, переводы строки?
islower ( c ) - символ нижнего регистра?
isupper ( c ) - символ верхнего регистра?
………………..
№10 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Динамическая память
Динамическая память выделяется и освобождается по явным запросам
из программы. Время жизни объектов, размещенных в динамической памяти,
контролируется программистом явным образом.
В заголовочном файле <alloc.h> описаны прототипы функций
malloc, calloc, realloc, free - все они рабочие, но являются анахронизмами.
Более корректный способ получения динамической памяти следующий:
< указатель > = new <тип-объекта> [ ( <инициализаторы> ) ]
Если динамическая память будет успешно выделена, операция new вернет адрес
выделенной памяти. В противном случае она вернет значение NULL.
Освободить ранее полученную динамическую память можно операцией delete
delete < указатель >
Попытка освободить динамическую память, которая не была вами получена,
приведет к ошибке времени выполнения.
примеры:
int *p = new int (3);
char *s = new char [20];
№11 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Пример: ввод строк в динамическую память и выдача их в обратном порядке.
№12 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Программный стек
Программный стек – часть памяти компьютера, которая используется
для размещения автоматических переменных и обмена данными между функциями.
Рассмотрим следующий фрагмент кода:
№13 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Рисунок, поясняющий работу программного стека:
№14 слайд
Содержание слайда: Структуры, препроцессор, динамическая память
Несколько причудливых описаний
Пусть имеется такое описание:
struct {
int x;
char *y;
} *p;
Интерпретируйте следующие выражения в соответствии с правилами языка Си:
++p -> x
p++ -> x
*p -> y
*p -> y++
*p -> ++y
*p++ -> y
*++p -> y
p+++y
Студенты, допустившие не более 1 ошибки, получают 5 баллов за активность.