Выделение памяти под двумерный динамический массив

При формировании двумерного динамического массива сначала выделяется память для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под одномерные массивы. На рисунке представлена схема динамической области памяти, выделенной под двумерный массив.

 


*matr[0] *matr[1] *matr[2] . . . *matr[n]

 

Рис. Выделение памяти под двумерный массив

 

При работе с динамической памятью в языке С++ существует 2 способа выделения памяти под двумерный динамический массив.

1) при помощи операции new, которая позволяет выделить в динамической памяти участок для размещения массива соответствующего типа, но не позволяет его инициализировать.

Синтаксис выделения памяти под массив указателей:

ИмяМассива = new Тип * [ВыражениеТипаКонстанты];

Синтаксис выделения памяти для массива значений:

ИмяМассива[ЗначениеИндекса] = new Тип [ВыражениеТипа

Константы];

ИмяМассива – идентификатор массива, то есть имя двойного указателя для выделяемого блока памяти.

Тип – тип указателя на массив.

ВыражениеТипаКонстанты – задает количество элементов (размерность) массива. Выражение константного типа вычисляется на этапе компиляции.

Например:

int n, m;//n и m – количество строк и столбцов матрицы

float **matr; //указатель для массива указателей

matr = new float * [n]; //выделение динамической памяти

под массив указателей

for (int i=0; i<n; i++)

matr[i] = new float [m]; //выделение динамической памяти

для массива значений

При выделении динамической памяти размеры массивов должны быть полностью определены.

 

2) при помощи библиотечной функции malloc (calloc), которая предназначена для выделения динамической памяти.

Синтаксис выделения памяти под массив указателей:

ИмяМассива = (Тип **) malloc(N*sizeof(Тип *));

или

ИмяМассива = (Тип **) calloc(N, sizeof(Тип *));

 

Синтаксис выделения памяти для массива значений:

ИмяМассива[ЗначениеИндекса]=(Тип*)malloc(M*sizeof(Тип));

или

ИмяМассива[ЗначениеИндекса]=(Тип*)calloc(M,sizeof(Тип));

 

ИмяМассива – идентификатор массива, то есть имя двойного указателя для выделяемого блока памяти.

Тип – тип указателя на массив.

N – количество строк массива;

M – количество столбцов массива.

Например:

int n, m;//n и m – количество строк и столбцов матрицы

float **matr; //указатель для массива указателей

matr = (float **) malloc(n*sizeof(float *));

//выделение динамической памяти под массив указателей

for (int i=0; i<n; i++)

matr[i] = (float *) malloc(m*sizeof(float));

//выделение динамической памяти для массива значений

Так как функция malloc (calloc) возвращает нетипизированный указатель void *, то необходимо выполнять его преобразование в указатель объявленного типа.

 








Дата добавления: 2015-02-16; просмотров: 1836;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.