Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Динамические массивы



Читайте также:
  1. RAID-массивы и матрицы
  2. Двумерные массивы
  3. ДВУМЕРНЫЕ МАССИВЫ
  4. Двумерные массивы
  5. ДВУМЕРНЫЕ МАССИВЫ
  6. Двумерные массивы
  7. Двумерные массивы

В динамической области памяти можно создавать двумерные массивы с помощью операции new или функции malloc. Остановимся на первом варианте, поскольку он более безопасен и прост в использовании.

При выделении памяти сразу под весь массив количество строк (самую левую раз­мерность) можно задавать с помощью переменной или выражения, а количество столбцов должно быть константным выражением, то есть явно определено до вы­полнения программы. После слова new записывается тип создаваемого массива, а за­тем — его размерности в квадратных скобках (аналогично описанию «обычных», нединамических массивов), например:

В этом фрагменте показано два способа создания динамического массива. В опе­раторе 1 адрес начала выделенного с помощью new участка памяти присваивается переменной а, определенной как указатель на массив из n*m элементов типа int. Имен­но такой тип значения возвращает в данном случае операция new. Скобки необхо­димы, поскольку без них конструкция интерпретировалась бы как массив указате­лей.

В операторе 2 адрес начала выделенного участка памяти присваивается перемен­ной b, которая описана как «указатель на указатель на int», поэтому перед присва­иванием требуется выполнить преобразование типа.

Строго говоря, по стандарту в этом случае рекомендуется применять другую опе­рацию преобразования но старые компиляторы могут ее не поддерживать:

Обращение к элементам динамических массивов производится точно так же, как к элементам «обычных», с помощью конструкции вида a[i ][j].

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

Более универсальный и безопасный способ выделения памяти под двумерный массив, когда обе его размерности задаются на этапе выполнения программы, при­веден ниже:


В операторе 1 объявляется переменная типа «указатель на указатель на int» и вы­деляется память под массив указателей на строки массива (количество строк — nrow). В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваи­вается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из ncol элементов типа int (рис.2).

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


Дата добавления: 2015-07-11; просмотров: 57 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.006 сек.)