Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Вопрос 41. Статическое и динамическое выделение памяти. Операторы new и delete.




В С++ объекты могут быть размещены либо статически – во время компиляции, либо динамически – во время выполнения программы, путем вызова функций из стандартной библиотеки. Основная разница в использовании этих методов – в их эффективности и гибкости. Статическое размещение более эффективно, так как выделение памяти происходит до выполнения программы, однако оно гораздо менее гибко, потому что мы должны заранее знать тип и размер размещаемого объекта. К примеру, совсем не просто разместить содержимое некоторого текстового файла в статическом массиве строк: нам нужно заранее знать его размер. Задачи, в которых нужно хранить и обрабатывать заранее неизвестное число элементов, обычно требуют динамического выделения памяти.

Оператор new выделяет динамическую память и возвращает указатель соответствующего типа на эту область памяти. Общая форма записи этого оператора такова.

p_var = new тип;

Оператор delete

Оператор delete освобождает память, на которую указывает аргумент. Эта память предварительно должна быть выделена с помощью оператора new. Общая форма оператора delete следующая.

Вопрос 42. Статические и динамические массивы: объявление, инициализация, использование. Привести примеры создания и обработки статического и динамического массивов на языке С/C++.

Динамическим называется массив, размер которого может меняться во время исполнения программы. Для изменения размера динамического массива язык программирования, поддерживающий такие массивы, должен предоставлять встроенную функцию или оператор. Динамические массивы дают возможность более гибкой работы с данными, так как позволяют не прогнозировать хранимые объёмы данных, а регулировать размер массива в соответствии с реально необходимыми объёмами. В отличие от динамических массивов существуют статические массивы и массивы переменной длины. Размер статического массива определяется на момент компиляции программы. Размер массива переменной длинны определяется во время выполнения программы. Отличием динамического массива от массива переменной длинны является автоматическое изменение размеров, что не трудно реализуется в случаях его отсутствия, поэтому часто не различают массивы переменной длины с динамическими массивами. int *mas = new int[10];

Пример:

#include <iostream>

using namespace std;

int main()

{

int num; // размер массива

cout << "Enter integer value: ";

cin >> num; // получение от пользователя размера массива

int *p_darr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++) {

// Заполнение массива и вывод значений его элементов

p_darr[i] = i;

cout << "Value of " << i << " element is " << p_darr[i] << endl;

}

delete [] p_darr; // очистка памяти

return 0;

Размер статического массива будет невозможно изменить в программе. При объявлении массива его размер можно указать непосредственно числом (как показано в последнем примере), а можно с помощью предопределенной константы:

Вопрос 43. Способы создания динамических массивов. Освобождение памяти, зарезервированной под динамический массив. Привести пример создания, инициализации и обработки динамического массива на языке С/C++.

int *mas = new int[10];

delete []mas;

Пример:

include <iostream>

using namespace std;

 

int main()

{

int num; // размер массива

cout << "Enter integer value: ";

cin >> num; // получение от пользователя размера массива

 

int *p_darr = new int[num]; // Выделение памяти для массива

for (int i = 0; i < num; i++) {

// Заполнение массива и вывод значений его элементов

p_darr[i] = i;

cout << "Value of " << i << " element is " << p_darr[i] << endl;

}

delete [] p_darr; // очистка памяти

return 0;

}






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных