- •Подготовка программы к исполнению
- •Директива препроцессора #include
- •Математические функции из библиотеки cmath
- •Заголовок функции main
- •Объявление переменных.
- •Объявление переменных простого типа
- •Объявление констант простого типа
- •Перечисляемые переменные.
- •Логические операции
- •Операторы
- •Операторы сложные
- •Составной оператор
- •Структурированные операторы
- •Условный оператор.
- •Блок-схема оператора разветвления
- •Условная операция.
- •Операция «запятая» в операторе if.
- •Преобразование и привидение типов.
- •Оператор выбора варианта.
- •Блок-схема оператора варианта
- •Цикл по счётчику
- •Цикл c предусловием.
- •Цикл c постусловием.
- •Операторы передачи управления
- •1) Спецификации формата, которые определяются символом % - для выделения, контроля и преобразования соответствующих им введенных значений;
- •2) Любые символы, которые могут быть во входном потоке и которые надо игнорировать:
- •2) Первого символа, который не соответствует формату (например, буква или пробел после выделения числа); .
- •3) Заданной длины поля вводимого значения, если она определена в формате.
- •4.2.2. Форматы вывода данных
- •1) Спецификации формата, которые определяются символом % - для вывода .Значений, определенных списком аргументов, если они есть;
- •2) Любые символы, которые должны быть выведены в выходной поток;
- •2 Позиции отводятся для знака числа и точки.
- •Составные типы данных
- •Обработка двумерного массива
- •Указатели
- •Порядок выполнения операций над указателями
- •Арифметические операции над адресами
- •Операторы распределения памяти new и delete
- •Указатели и динамические массивы
- •Указатели и спецификатор const
- •Массивы указателей
- •Организация динамического двумерного массива
- •Функции работы со строками
- •Действия, производимые над строками и их правила Присвоение
- •Конкатенация строк
- •Копирование строк
- •Определяет длину строки
- •Указатели и строки
- •Введение в класс string
- •Структуры
- •Ссылочные переменные
- •Функции
- •Функции, имеющие возвращаемый параметр с помощью оператора return.
- •Объявление формальных параметров
- •Ввод - вывод записей
- •Дополнительные возможности работы с файлами
- •Работы с файлами и стандартный класс mfc cFileDialog.
- •Работа с файлами с помощью mfc( классы cFile, cStdioFile, ... ) и стандартный класс mfc cFileDialog.
- •Класс cFile
- •Класс cMemFile
- •Класс cStdioFile
- •Примеры записи и чтения из файла
Арифметические операции над адресами
++ - Инкрементация. Увеличить указатель на 1. После увеличения указатель будет указывать на следующий элемент массива. Т.Е. адрес увеличится на размер элемента типа.
Пример вывода элементов одномерного массива с использованием операции инкрементации
#include <iostream>
using namespace std ;
int main ( )
{
int array [ ] = { 10, 20, 30, 40, 50 } ;
int size = sizeof ( array ) / sizeof ( array [ 0 ] ) ;
// вывод с использованием константного адреса массива
for ( int i = 0; i < size; i++ )
cout << * ( array + i ) << '\t' ;
cout << endl ;
// вывод с использованием указателя
int* p = array ;
int count = 0 ;
do
{
cout << * p++ << '\t' ;
count++ ;
} while ( count < size ) ;
cout << endl ;
return 0 ;
}
. Пример вывода строки с использованием указателя
#include <iostream>
using namespace std ;
int main ( )
{
char s [ 20 ] ;
char* p = s ;
cout << "-> " ; cin >> p ;
cout << "\nWizard - pointer!\n\n" ;
while ( * p )
cout << p++ << endl ;
p = s ;
cout << "\nInitial string -> " << p << endl ;
return 0 ;
}
-- - Декрементция. Уменьшение значения указателя на размер базового типа.
+ - Сложение. Увеличить указатель на целое значение или на величину другого однотипного указателя.
+= - Сложение с замещением. Увеличить существующий указатель на целое значение.
- - Вычитание. Уменьшить указатель на целое значение или на величину другого однотипного указателя.
-= -Вычитание с замещением. Уменьшить указатель на целое значение или на величину другого однотипного указателя.
==,!=,>,<,>=,<= - Отношения.
new - Выделение памяти. Выделяется свободная память в соответствии с базовым типом. Адрес этой памяти передается указателю того же типа.
Delete Освобождение памяти. По адресу указателя освобождается ОП и значение указателя обнуляется.
Пример использования оператора new и delete
#include <iostream>
using namespace std ;
int main ( )
{
int x = 25 ;
cout << "Value x\t" << x ;
// объявление указателя с инициализацией
int* py = new int ( x ) ;
cout << "\nValue *py before delete\t" << * py ;
// освобождение памяти
delete py ;
// состояние памяти после освобождения
cout << "\nValue *py after delete\t" << * py << endl ;
return 0 ;}
Операторы распределения памяти new и delete
Для экономичного управления оперативной памятью существует динамическая стратегия управления – это когда за один сеанс работы программы по ходу выполнения неоднократно выделяется, обрабатывается и если в этом есть необходимость, освобождается оперативная память базового типа.
Формат выделения памяти:
Тип * указатель = new тип; //1 формат
Тип * указатель = new тип (значение); //2 формат
Оператор new выделяет блок памяти базового типа и возвращает указателю адрес на нулевую ячейку этого блока. Если new не в состоянии найти необходимое пространство свободной памяти, то возвращает адрес NULL (никакой), что определяется значением 0. Тип указателя и тип выделяемой памяти обязательно должны совпадать по базовому типу. Когда, используется второй формат одновременно с выделением необходимой памяти производится инициализация содержимого блока памяти указанным в круглых скобках значением.
Пример использования оператора new
#include <iostream>
using namespace std ;
int main ( )
{
// объявление указателей
int* pi ; unsigned short* pu ;
// выделение памяти
pi = new int ;
pu = new unsigned short ( 200 ) ;
// объявление указателя с выделением памяти
double* pd = new double ;
// объявление указателя с инициализацией
float* pf = new float ( -3.15 ) ;
// вывод адресов, выделенных new
cout << "Pointers" ;
cout << "\npi\t" << pi << "\npu\t" << pu ;
cout << "\npd\t" << pd << "\npf\t" << pf ;
// вывод значений
cout << "\n\nValues with initialization" ;
cout << "\n* pu\t" << * pu ;
cout << "\n* pf\t" << * pf ;
cout << "\n\nValues without initialization" ;
cout << "\n* pi\t" << * pi ;
cout << "\n* pd\t" << * pd << endl ;
// присваивание значений и вывод
* pi = - * pu ; * pd = - * pf ;
cout << "\n\nValues after initialization" ;
cout << "\n* pi\t" << * pi ;
cout << "\n* pd\t" << * pd << endl ;
return 0 ;
}
Чтобы освободить блок динамической памяти, выделенный оператором new,необходимо выполнить операцию динамического освобождения памяти delete.
Формат оператора динамического освобождения памяти:
delete указатель;
После освобождения динамической памяти указатель получает адрес 0 (NULL) и операционная система помечает ее как свободную. В связи с этим не следует использовать указатели на освобожденную память.