Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
09.04.2015
Размер:
212.99 Кб
Скачать

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

Динамическими называют такие массивы, для которых количество их элементов заранее не известнои оперативная память для них выделяется в процессе выполнения программы.Рассмотрим построение динамических массивов в Си++ с помощью указателей и оператораnew. Ниже приводится пример программы, реализующей создание двух динамических массивов целых чисел: одномерного массива с числом элементов, равных К (вводится с клавиатуры) и двумерного массива с числом строкNи числом столбцовM(также вводятся с клавиатуры). Первый массив создается с помощью указателяp, второй – с помощью указателяp2. Указательp2 является указателем на указатель типаint( в соответствии с объявлениемint **p2;).

#include<stdio.h>

#include<conio.h>bv

void main ()

{

int *p;

int **p2;

int i,j,K,N,M;

clrscr();

printf("***array1 ***\n");

printf("K = ");

scanf("%d", &K);

p = new int[K];

for (i=0; i<K; i++)

{

p[i] = i+3;

printf("%d ",p[i]);

}

printf("\n***array2 ***\n");

printf("N = ");

scanf("%d",&N);

printf("M = ");

scanf("%d",&M);

p2 = new int * [N];

for (i=0;i<N;i++)

{ p2[i] = new int[M];

for (j=0;j<M;j++)

{ p2[i][j] = i + j;

printf("%d ", p2[i][j]);

}

printf("\n");

}

getch();

}

В результате выполнения этой программы при К = 6, N= 3и M= 4 на экране получим следующую информацию:

***array1 *** К = 6

3 4 5 6 7 8

***array2 ***

N = 3

M = 4

0 1 2 3

1 2 3 4

2 3 4 5

Рис.5. иллюстрирует процесс создания двух динамических массивов. Для создания двумерного массива вначале выделяется свободное место в памяти компьютера для массива указателей на intиопределяется значение (оператор p2 =newint* [N];,а непосредственно после выполнения этого оператора значение p2равно адресу нулевого участка выделенной памяти). Затем выделяется свободное место для каждой строки матрицы и определяется значение каждого i -го указателя на int (оператор p2[i] =newint[M];, а непосредственно после выполнения этого оператора значение p2[i] равно адресу нулевого участка, выделенной для p2[i]области). На рис.5. показано состояние указателей непосредственно после выполнения операторов new, в этот момент значения выделенных участков еще не определены.

В заключение раздела отметим следующее:

  • Указатели – это, такие объекты программы, значения которых являются адреса других объектов, в том числе и самих указателей. Описание указателей для элементарных данных осуществляется с указанием типа объектов, на которые может указывать указатель: int*p1;//–указатель на объект типа intfloat*p2;// -указатель на объект типа floatfloat**p3;// -указатель на указатель на объект типа float void*p4;// -указатель на объект без информации о типе указываемого объекта

  • Для указателей применяются операции: разыменования, преобразования типа, присваивания, получения адреса, сложения и вычитания, инкремента и декремента, отношений.

  • Массивы – это объекты программы, состоящие из однотипных элементов, которые располагаются в оперативной памяти на соседних участках. Число индексов и диапазоны их значений должны быть заранее известны (эта информация указывается при объявлении массива). Примеры объявлений: intf[10];//одномерный массив f из 10 элементов типа int, индекс может иметь // значения от 0 до 9 chars[15];// одномерный массив s из 10 элементов типа char, индекс может иметь // значения от 0 до 14 double V[3][4];//двумерный массив V из 3 строк и 4 столбцов, первый индекс может принимать значения от 0 до 2, второй – от 0 до 3; каждый элемент массива типа doublе.

  • Транслятор языка Си воспринимает только одномерные массивы. Однако элементами одномерного массива в свою очередь могут быть одномерные массивы, поэтому двумерные массивы – это массивы массивов, трехмерные – массивы массивов, у которых, опять же, элементами являются одномерные массивы, и т. д.

  • Обращение к элементам массива осуществляется с помощью переменных с индексами (f[i],s[5],V[i][k]) или с помощью указателей (*( p1 +i)или p1[i], *(p3[i] +j)или p3[i][j] ). При обращении с помощью указателей должны быть выделены участки памяти для размещения соответствующих массивов с помощью оператора new.

  • С помощью указателей возможно реализовать динамические массивы (массивы с заранее неизвестной размерностью).

Соседние файлы в папке attachments_05-09-2012_18-55-54