- •1.Системы счисления.
- •2.Принцип программного управления.
- •3. Назначение и классификация языков программирования.
- •4.Понятие и состав систем программирования.
- •5. Понятие информации и алгоритмов.
- •6.Блок-схемы разветвляющихся алгоритмов.
- •7.Блок-схемы циклических алгоритмов.
- •8.Потоковый ввод/вывод данных.
- •9.Использование манипуляторов при вводе/выводе данных.
- •10.Управляющие коды-символы. Отображение специальных символов на экране монитора.
- •11.Форматированный ввод/вывод данных.
- •12.Строковый и символьный ввод-вывод информации.
- •14.Пространство имен. Ключевое слово using как директива.
- •15. Процессор и имена заголовочных файлов
- •16.Средства отладки программ ms vs
- •17.Выполнение приложения с использованием средств интерактивной отладки.
- •18.Выполнение приложения с использованием средств планируемой отладки.
- •20.Определение переменных. Переменные и константы.
- •Описание и инициализация переменных
- •Int k; // это переменная целого типа int
- •Задание и использование констант
- •21.Логические переменные и примеры их использования в программах.
- •22.Операции присваивания. Особенности выполнения. Условная операция ?:
- •Пример конструкции ветвления
- •25.Оператор перехода goto. Оператор return. Оператор return
- •Оператор goto
- •26.Особенности синтаксиса и выполнения операторов перехода continue, break.
- •Цикл for
- •Описание синтаксиса
- •30.Время существования и область видимости переменных (auto, static, extern, register).
- •31.Создание исполняемого файла.
- •32.Массив. Определение и инициализация массива.
- •Пример инициализации массива
- •33.Символы, строки (инициализация, алгоритмы). Символьный тип char
- •34.Стандартные функции работы со строками. Функции работы со строками c
- •35.Обработка символьной информации.
- •36.Инициализация многомерных массивов.
- •37.Матрицы. Инициализация, ввод, вывод, алгоритмы поиска в матрице.
- •38.Ввод, вывод двумерных массивов.
- •39.Операции над указателями. Типы указателей.
- •40. Указатели на указатели.
- •41.Указатели и строки.
- •42.Ссылочный тип данных.
- •43. Указатели на многомерные массивы.
- •44.Массивы и указатели. Понятие индекса. Инициализация. Доступ к компонентам.
- •45.Многомерные массивы. Связь между указателями и массивами. Связь между массивами и указателями
- •46.Объявление и определение функций.
- •47.Вызов и использование функций.
- •Возврат в вызывающую функцию
- •48.Способ передачи аргументов в функции. Массивы как параметры функций.
- •49.Перегрузка функций. Функции с переменным числом аргументов. Задание параметров функции по умолчанию.
- •50.Указатели как формальные параметры и как результат функций.
- •51.Ссылки как формальные параметры и как результат функций.
- •52.Использование указателей на функцию.
- •53.Передача указателя на функцию.
- •54.Использование макроопределений.
- •55.Динамические переменные. Основные свойства динамических переменных.
- •56.Динамические массивы.
- •57.Формирование динамических переменных с использованием библиотечных функций.
- •58.Формирование динамических переменных с использованием операций new и delete.
- •59.Массивы указателей как структура данных.
- •Типы данных, используемые при работе с массивами указателей
- •60.Многоуровневые указатели.
- •61.Динамические матрицы.
- •62.Передача параметров функции main. Передача параметров в функцию
- •Тип имя_функции (const тип_переменной* имя_переменной, …) Пример
56.Динамические массивы.
Резервирование и освобождение памяти в программах на C++ может происходить в любой момент времени. Осуществляются операции распределения памяти двумя способами:
с помощью функции malloc, calloc, realloc и free; посредством оператора new и delete.
Функция malloc резервирует непрерывный блок ячеек памяти для хранения указанного объекта и возвращает указатель на первую ячейку этого блока. Обращение к функции имеет вид:
void *malloc(size); Функция — calloc также предназначена для выделения памяти. Запись ниже означает, что будет выделено num элементов по size байт. void *calloc (nime, size); Функция realloc изменяет размер выделенной ранее памяти. Обращаются к ней так: char *realloc (void *p, size); Здесь p — указатель на область памяти, размер которой нужно изменить на size. Для освобождения выделенной памяти используется функция free. Обращаются к ней так: void free (void *p size); Здесь p — указатель на участок памяти, ранее выделенный функциями malloc,calloc или realloc.
Операторы new и delete аналогичны функциям malloc и free. New выделяет память, а его единственный аргумент — это выражение, определяющее количество байтов, которые будут зарезервированы. Возвращает оператор указатель на начало выделенного блока памяти. Оператор delete освобождает память, его аргумент — адрес первой ячейки блока, который необходимо освободить.
Динамический массив — массив переменной длины, память под который выделяется в процессе выполнения программы. Выделение памяти осуществляется функциями calloc, malloc или оператором new. Адрес первого элемента выделенного участка памяти хранится в переменной, объявленной как указатель. Например, следующий оператор означает, что описан указатель masи ему присвоен адрес начала непрерывной области динамической памяти, выделенной с помощью оператора new:
int *mas=new int[10];
Фактически, в переменной mas хранится адрес нулевого элемента динамического массива. Следовательно, адрес следующего, первого элемента, в выделенном участке памяти — mas+1, а mas+i является адресом i-го элемента. Обращение к i-му элементу динамического массива можно выполнить, как обычно mas[i], или другим способом *(mas +i). Важно следить за тем, чтобы не выйти за границы выделенного участка памяти.
Когда динамический массив (в любой момент работы программы) перестает быть нужным, то память можно освободить с помощью функции free или оператора delete.
57.Формирование динамических переменных с использованием библиотечных функций.
Динамическое выделение памяти с помощью библиотечной функции mallocсостоит из следующих шагов.
1. Включение в программу файла заголовков malloc.hдирективой #include<malloc.h>.
2. Объявление указателя нужного типа, например int*p;
3. Вызов функции mallocс указанием в качестве параметра требуемого количества памяти в байтах. Так как функция выдает результат своей работы в виде указателя на типvoid, выполняется приведение типа (преобразуется тип результата к типу, указанному в объявлении). Присваивается полученное значение объявленному указателю. Пример:
p=(int*)malloc(число элементов массива*sizeof(int));
Вместо intможет быть подставлен любой стандартный или введенный программистом тип.
4. Проверка факта выделения памяти. Если выделение памяти в нужном объеме невозможно, функция mallocвозвращает в качестве своего результата нулевой указательNULL, соответствующий значению ложь. Если выделение памяти выполнено, продолжаем выполнение программы, если нет, выходим из нее с соответствующей диагностикой о недостатке памяти. Пример:
if(!p) сообщение, выход;elseпродолжение;
5. Освобождение памяти после окончания работы с ней. Для этого вызываем функцию fгее и используем указатель в качестве аргумента:
free(p);
Значение указателя, полученное после выполнения шага 3, должно сохраняться до выполнения шага 5. В противном случае вся память, выделенная по этому адресу, будет потеряна при выходе из программы, что, в конечном счете, может привести к недостатку памяти и нарушению работы операционной системы.
Наиболее частой причиной «зависания» компьютера при работе с динамически выделяемой памятью является несоответствие инструкций mallocиfree(в обеих инструкциях должен использоваться один и тоже указатель) или недостаточный объем свободной памяти.
В качестве примера рассмотрим ввод/вывод одномерного динамического массива произвольной длины, задаваемой с клавиатуры.
Inti,n,*massiv;//объявление указателяcout<<RUS("Введите размер массива\n");cin>>n;//ввод размера массиваmassiv=(int*)malloc(n*sizeof(int)); //выделение динам.памятиif(!massiv)//проверка факта выделения памяти {cout<<RUS("\nНедостаточно памяти");cout<<RUS("\nНажмите любую клавишу для завершения программы ...\n");getch();return0;}cout<<RUS("Введите массив\n");for(i=0;i<n;i++)cin>>massiv[i];//ввод массиваcout<<RUS("\nmassiv\n");for(i=0;i<n;i++)cout<<' '<<massiv[i];//вывод массиваfree(massiv);//освобождение памяти