Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С_глава1.doc
Скачиваний:
2
Добавлен:
16.12.2018
Размер:
548.86 Кб
Скачать

Многомерные массивы

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

Примеры объявления многомерного массива.

1) double b[34][20];

// Двумерный массив элементов типа double, состоящий из 34 строк и 20 столбцов, первый элемент b[0][0]

2) int a[3][10][21]; // Трехмерный массив элементов типа int, первый элемент

// a[0][0][0]

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

Примеры инициализации многомерных массивов.

int a[5][3] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //a[0][0]=1, a[0][1]=2, a[0][3]=3

int a[5][3]={{1,2,3}, // Чтобы не запутаться в числах,

{4,5,6}, // лучше сгруппировать данные по

{7,8,9}, // строкам

{10,11,12}

{13,14,15}};

Занятие 4. Указатели и массивы.

Внимание! Вначале занятия потоковая контрольная! Повторите пройденный материал! Удачи на контрольной!

Теоретическая часть

Указатели и одномерные массивы

В языке С++ указатели и массивы тесно связаны друг с другом. Имя массива соответствует адресу его первого элемента. Поэтому можно присвоить указателю адрес первого элемента, используя просто имя массива:

int iarray[10];

int *pi;

pi=iarray; // Это то же самое, что pi=&iarray[0];

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

имя_массива = &имя массива = &имя_массива[0]

Элементы массива хранятся в памяти последовательно друг за друга. Вспомним, что к указателю можно применять операцию +, которая позволяет получить доступ к следующей ячейке памяти. Доступ к i-му элементу массива будет выглядеть следующим образом *(имя_массива + i). Таким образом, можно получить доступ ко всем элементам массива:

#include <stdio.h>

void main( )

{

float mass[4];

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

{

*(mass+i) = i + 1;

printf("%2.1f\t", *(mass+i));

}

printf("\n");

}

Отметим, что при работе с массивами код mass[i] компилятор автоматически заменяет на *(mass+i).

Размещение одномерных массивов в динамической памяти.

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

new имя_ типа[количество_элементов];

Она возвращает указатель на выделенную память.

float *pa;

pa = new float [25];

Теперь по адресу, хранящемуся в pa, можно разместить массив из 25 элементов типа float.

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

delete [] pa; // Освобождение памяти, выделенной для массива

Пример. Вести с клавиатуры размер одномерного массива типа int. Разместить его в области динамического распределения памяти. Присвоить значения его элементам по формуле A[i]=i. Вывести их на экран. Освободить память.

#include <stdio.h>

void main()

{

int i, N, *pi;

printf("N=");

scanf("%d",&N);

pi = new int[N];

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

{

*(pi+i) = i;

printf(" *(pi+%d)=%d \n", i,*(pi+i));

}

delete [] pi;

}

Результат работы программы:

N=5

*(pi+0)=0

*(pi+1)=1

*(pi+2)=2

*(pi+3)=3

*(pi+4)=4