Главная

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

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

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

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

ТОР 5 статей:

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

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

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

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

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

КАТЕГОРИИ:






Динамические массивы, оператор new




· Динамический массив-массив, число элементов которого неизвестно изначально.

· Память под динамические массивы выделяется с помощью оператора new(либо функции malloc)

int n=10;

int *a=new int[n];

· double *b=(double*) malloc (n*sizof(double));

· Под динамический массив выделяется столько памяти, сколько нужно для хранения величины типа int, величина n может быть переменной

· Область действия динамического массива зависит от места описания указателя через который производится работа с массивами

· Локальная переменная при выходе из блока теряется

· Если переменная-указатель, то при выходе из блока, динамическая память перестаёт быть доступна, однако она не помечается, как свободная и не может быть использована в дальнейшем, это называется утечкой памяти и является распространённой ошибкой.

· Ф-я malloc унаследована из библиотеки С, желательно использовать new

· Динамические двумерные массивы: при выделении памяти сразу под весь массив, кол-во строк –самую левую размерность. можно задавать с помощью переменной, а кол-во столбцов с помощью константного выражения. После слова new записывается тип массива, затем его размерности в квадратных скобках

int n;

const int m=5;

cin>>n;

int (*a)[m]=mew int [n][m];

int **b=(int**) new int [n][m];

· Для того, чтобы понять почему динамические массивы объявляются именно так, нужно разобраться в индексации: поскольку для доступа к элементу массива применяются 2 операции разадресации, переменная в которой хранится адрес начала массива должна быть указателем к указателю.

· Более универсальный способ:

int nrow,ncol;

cout<<”Введите n, m”<<endl;

cin>>nrow>>ncol;

int **a=new int *[nrow]; //1

for (int i=0; i<nrow; i++) //2

a[i]=new int [ncol]; //3

В 1 объявляется переменная типа указатель на указатель на int и выделяется память под массив указателей на строки массива

В 2 организуется цикл для выделения памяти под каждую строку массива

В 3 каждому элементу массива указателя на строки присваивается адрес начала участка памяти, выделенной под строку двумерного массива

·

 
Схема динамической области памяти, выделяемой под массивы:

·

 
 

 







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

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