🗊Презентация Структуры, препроцессор, динамическая память

Категория: Образование
Нажмите для полного просмотра!
Структуры, препроцессор, динамическая память, слайд №1Структуры, препроцессор, динамическая память, слайд №2Структуры, препроцессор, динамическая память, слайд №3Структуры, препроцессор, динамическая память, слайд №4Структуры, препроцессор, динамическая память, слайд №5Структуры, препроцессор, динамическая память, слайд №6Структуры, препроцессор, динамическая память, слайд №7Структуры, препроцессор, динамическая память, слайд №8Структуры, препроцессор, динамическая память, слайд №9Структуры, препроцессор, динамическая память, слайд №10Структуры, препроцессор, динамическая память, слайд №11Структуры, препроцессор, динамическая память, слайд №12Структуры, препроцессор, динамическая память, слайд №13Структуры, препроцессор, динамическая память, слайд №14

Вы можете ознакомиться и скачать презентацию на тему Структуры, препроцессор, динамическая память. Доклад-сообщение содержит 14 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Введение в С++
Структуры, препроцессор, динамическая память
Описание слайда:
Введение в С++ Структуры, препроцессор, динамическая память

Слайд 2





Структуры, препроцессор, динамическая память
Структуры
Формат:	struct <имя-структуры> { <список-полей> } ;
	struct <имя-структуры>  <описатели-переменных> ;
	struct [<имя-структуры>] { <список-полей> } <описатели-переменных> ;
Аналоги структур в реальной жизни – различные формуляры, анкеты, учетные карточки.
Существует два способа доступа к полям структурных переменных:
    	<имя-структурной-переменной> . <имя-поля>
	<указатель-на-структурную-переменную> -> <имя-поля>
Пример: электронная картотека для домашней библиотеки
	struct form {
		char *ptitle;		наименование книги
		char *pauthor;		автор
		float price;  		стоимость
			} ;		
	struct form books [ 1024 ] ;		картотека есть массив структур
	struct form  *pbook = books ;		указатель на массив структур
Описание слайда:
Структуры, препроцессор, динамическая память Структуры Формат: struct <имя-структуры> { <список-полей> } ; struct <имя-структуры> <описатели-переменных> ; struct [<имя-структуры>] { <список-полей> } <описатели-переменных> ; Аналоги структур в реальной жизни – различные формуляры, анкеты, учетные карточки. Существует два способа доступа к полям структурных переменных: <имя-структурной-переменной> . <имя-поля> <указатель-на-структурную-переменную> -> <имя-поля> Пример: электронная картотека для домашней библиотеки struct form { char *ptitle; наименование книги char *pauthor; автор float price; стоимость } ; struct form books [ 1024 ] ; картотека есть массив структур struct form *pbook = books ; указатель на массив структур

Слайд 3





Структуры, препроцессор, динамическая память
Разработаем getprice – функцию для поиска книги в картотеке 
по её названию и выдачи стоимости книги.
Вариант 1 – используем индексы
Вариант 2 – используем адресную арифметику
Описание слайда:
Структуры, препроцессор, динамическая память Разработаем 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;

Именованные битовые поля используются для экономии памяти 
и для работы с аппаратными регистрами.
Описание слайда:
Структуры, препроцессор, динамическая память Битовые поля Рассмотрим структуру специального вида: 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 [<имя-объединения>] { <список-полей> } <описатели-переменных> ;
Объединения – это такие структуры, в которых поля накладываются друг на друга.
Примеры:
Описание слайда:
Структуры, препроцессор, динамическая память Объединения Формат: union <имя-объединения> { <список-полей> } ; union <имя-объединения> <описатели-переменных> ; union [<имя-объединения>] { <список-полей> } <описатели-переменных> ; Объединения – это такие структуры, в которых поля накладываются друг на друга. Примеры:

Слайд 6





Структуры, препроцессор, динамическая память
Определение типа
Формат:	typedef <спецификация-типа> <описатели> ;
Примеры:
Описание слайда:
Структуры, препроцессор, динамическая память Определение типа Формат: 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 )
Описание слайда:
Структуры, препроцессор, динамическая память Препроцессор Препроцессор есть текстовый процессор, который просматривает исходный текст до компиляции и решает три задачи: обрабатывает символические имена; отыскивает и вставляет файлы; осуществляет условную компиляцию. Директивы #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
Такие конструкции часто используются при инсталляции и настройке
программных продуктов.
Описание слайда:
Структуры, препроцессор, динамическая память Директива #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 )  	- символ верхнего регистра?
	………………..
Описание слайда:
Структуры, препроцессор, динамическая память пример: #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];
Описание слайда:
Структуры, препроцессор, динамическая память Динамическая память Динамическая память выделяется и освобождается по явным запросам из программы. Время жизни объектов, размещенных в динамической памяти, контролируется программистом явным образом. В заголовочном файле <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 баллов за активность.
Описание слайда:
Структуры, препроцессор, динамическая память Несколько причудливых описаний Пусть имеется такое описание: struct { int x; char *y; } *p; Интерпретируйте следующие выражения в соответствии с правилами языка Си: ++p -> x p++ -> x *p -> y *p -> y++ *p -> ++y *p++ -> y *++p -> y p+++y Студенты, допустившие не более 1 ошибки, получают 5 баллов за активность.



Похожие презентации
Mypresentation.ru
Загрузить презентацию