Различия
Показаны различия между двумя версиями страницы.
— | operatory_dinamicheskogo_raspredelenija_pamjati [2025/07/06 12:39] (текущий) – создано - внешнее изменение 127.0.0.1 | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Операторы динамического распределения памяти С++ ====== | ||
+ | {{htmlmetatags> | ||
+ | metatag-description=(В языке С++ предусмотрены два оператора динамического распределения памяти: | ||
+ | }} | ||
+ | {{ :: | ||
+ | **Операторы динамического распределения памяти**: | ||
+ | В языке С++ предусмотрены два оператора динамического распределения памяти: | ||
+ | ===== Общее определение операторов new и delete ===== | ||
+ | Оператор new выделяет область памяти и возвращает указатель на ее первую ячейку. Оператор delete освобождает память, | ||
+ | |||
+ | * // | ||
+ | * **delete** // | ||
+ | * в случае массива в оператор delete используются скобки []: **delete** [] // | ||
+ | < | ||
+ | /* | ||
+ | * File: | ||
+ | * Author: darkfire | ||
+ | * | ||
+ | * Created on September 15, 2010, 6:32 PM | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | using namespace std; | ||
+ | |||
+ | const int SIZE = 7; | ||
+ | |||
+ | int main () { | ||
+ | srand(time(NULL)); | ||
+ | int *parr = new int [SIZE]; // Определили указатель. Выделили память для массива. | ||
+ | int *parr0 = parr; // | ||
+ | |||
+ | for (int i=0; | ||
+ | *parr=rand()%100; | ||
+ | cout<< | ||
+ | parr++; | ||
+ | } | ||
+ | parr = parr0; | ||
+ | | ||
+ | for (int i=0; | ||
+ | cout<< | ||
+ | parr++; | ||
+ | } | ||
+ | parr = parr0;/* если указателю не присвоить адресс первого элемента массива | ||
+ | * оператор делете будет выводить ошибку. | ||
+ | */ | ||
+ | delete [] parr; | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | ====== Многомерные динамические массивы ====== | ||
+ | Многомерный массив в C по своей сути одномерен. Операции new и delete позволяют создавать и удалять динамические массивы, | ||
+ | |||
+ | Следующий пример иллюстрирует работу с динамическими массивами. | ||
+ | < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | int i, j; | ||
+ | |||
+ | // Переменные для описания характеристик массивов. | ||
+ | int m1 = 5, m2 = 5; | ||
+ | |||
+ | /* | ||
+ | Организация двумерного динамического массива производится в два этапа. | ||
+ | Сначала создаётся одномерный массив указателей, | ||
+ | этого массива присваивается адрес одномерного массива. Для характеристик | ||
+ | размеров массивов не требуется константных выражений. | ||
+ | */ | ||
+ | int **pArr = new int*[m1]; | ||
+ | for (i = 0; i < m1; i++) | ||
+ | pArr[i] = new int[m2]; | ||
+ | |||
+ | pArr[3][3] = 100; | ||
+ | cout << pArr[3][3] << " | ||
+ | |||
+ | | ||
+ | |||
+ | for (i = 0; i < m1; i++) | ||
+ | delete[]pArr[i]; | ||
+ | delete[]pArr; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ====== Алгоритм изменения размера динамического массива ====== | ||
+ | Например, | ||
+ | - Создаем новый динамический массив с размерность на единицу больше от существующего массива. | ||
+ | - Копируем все данные из старого массива в новый массив. | ||
+ | - Добавляем значение нового элемента массива. | ||
+ | - Удаляем старый массив. (Может понадобиться изменить переменную размерности массива, | ||
+ | - Присваиваем старому указателю адрес нового массива. | ||
+ | |||
+ | ====== Примеры на многомерные динамические массивы ====== | ||
+ | * Организация двумерного " | ||
+ | Сначала создаётся одномерный массив указателей, | ||
+ | |||
+ | < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | int i, j; | ||
+ | |||
+ | // Переменные для описания характеристик массивов. | ||
+ | int m1 = 5, wm = 5; | ||
+ | int **pXArr = new int*[m1]; | ||
+ | |||
+ | for (i = 0; i < m1; i++, wm--) | ||
+ | pXArr[i] = new int[m1]; | ||
+ | |||
+ | |||
+ | // | ||
+ | for (i = m1 - 1; i >= 0; i--, wm++) { | ||
+ | for (j = 0; j < wm; j++){ | ||
+ | pXArr[i][j]=0; | ||
+ | cout<< | ||
+ | } | ||
+ | cout<<" | ||
+ | } | ||
+ | |||
+ | // | ||
+ | |||
+ | for (i = 0; i < m1; i++) | ||
+ | delete[]pXArr[i]; | ||
+ | delete[]pXArr; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | * **Организация трехмерного динамического массива.** | ||
+ | Создание и уничтожение трёхмерного массива требует дополнительной итерации. Однако здесь также нет ничего принципиально нового. | ||
+ | < | ||
+ | # | ||
+ | using namespace std; | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | int i, j; | ||
+ | |||
+ | // Переменные для описания характеристик массивов. | ||
+ | int m1 = 5, m2 = 5, m3 = 2; | ||
+ | |||
+ | // указатель на указатель на указатель :) | ||
+ | int ***ppArr; | ||
+ | |||
+ | // Создание массива | ||
+ | ppArr = new int**[m1]; | ||
+ | for (i = 0; i <m1; i++) | ||
+ | ppArr[i] = new int*[m2]; | ||
+ | |||
+ | for (i = 0; i < m1; i++) | ||
+ | for (j = 0; j < m2; j++) | ||
+ | ppArr[i][j] = new int[m3]; | ||
+ | |||
+ | ppArr[1][2][3] = 750; | ||
+ | cout << ppArr[1][2][3] << " | ||
+ | |||
+ | // Удаление в последовательности, | ||
+ | for (i = 0; i < m1; i++) | ||
+ | for (j = 0; j < m2; j++) | ||
+ | delete[]ppArr[i][j]; | ||
+ | |||
+ | for (i = 0; i < m1; i++) | ||
+ | delete[]ppArr[i]; | ||
+ | delete[] ppArr; | ||
+ | } | ||
+ | </ |
📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.
📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Nginx простые примеры конфигурации
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах
7 Самых Популярных Обзоров
- Хостинг для Python-скриптов и приложений
- ТОП 4 лучших антидетект браузеров (Бесплатные & Платные)
- Подборка купонов (промокоды) на хостинг, антидетект браузеры
- Обзор THE.Hosting (PQ Hosting): надежный хостинг с профессиональной поддержкой
- Хостинг в России
- Хостинг в Европе
- Обзор браузера Dolphin {anty} для мультиаккаунтинга