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

Int w[2][3]; /* двумерный массив из двух строк и трех столбцов

w[0][0] w[0][1] w[0][2]

w[1][0] w[1][1] w[1][2] */

double f[10]; /* вектор из 10 элементов имеющих тип double */

Указатели на многомерные массивы в языке С++ - это массивы массивов, т.е. такие массивы, элементами которых являются массивы. При объявлении таких массивов в памяти компьютера создается несколько различных объектов. Например, при выполнении объявления двумерного массива int arr[4][3] в памяти выделяется участок для хранения значения переменной arr , которая является указателем на массив из четырех указателей. Для этого массива из четырех указателей тоже выделяется память. Каждый из этих четырех указателей содержит адрес массива из трех элементов типаint , и, следовательно, в памяти компьютера выделяется четыре участка для хранения четырех массивов чисел типа int, каждый из которых состоит из трех элементов. Такое выделение памяти показано на схеме.

Arr

 

arr[0]

arr[0][0]

arr[0][1]

arr[0][2]

arr[1]

arr[1][0]

arr[1][1]

arr[1][2]

arr[2]

arr[2][0]

arr[2][1]

arr[2][2]

arr[3]

arr[3][0]

arr[3][1]

arr[3][2]

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

Таким образом, объявление arr2[4][3] порождает в программе три разных объекта: указатель с идентификатором arr, безымянный массив из четырех указателей и безымянный массив из двенадцати чисел типа int.

Для доступа к безымянным массивам используются адресные выражения с указателем arr. Доступ к элементам массива указателей осуществляется с указанием одного индексного выражения в форме arr2[2] или *(arr2+2). Для доступа к элементам двумерного массива чисел типа int должны быть использованы два индексных выражения в форме arr2[1][2] или эквивалентных ей *(*(arr2+1)+2) и (*(arr2+1))[2]. Следует учитывать, что с точки зрения синтаксиса языка С++ указатель arr и указатели arr[0],arr[1], arr[2], arr[3] являются константами и их значения нельзя изменять во время выполнения программы.

Наличие размерностей индексов в объявлении параметра дает возможность компилятору сообщить функции о том, как расположены элементы в массиве. В двумерном массиве каждая строка по существу является одномерным массивом. Чтобы определить местоположение элемента в некоторой строке, функция должна точно знать, сколько элементов находится в каждой строке, чтобы она смогла пропустить соответствующее количество ячеек памяти при обращении к массиву. Таким образом, при обращении к a [ l ] [2] функция знает, что для доступа ко второй строке (строка 1) нужно пропустить в памяти три элемента первой строки, а затем обратиться к третьему элементу этой строки (элементу 2).

// Пример использования двумерного массива

# include<iostream . h>

# include < iomanip . h >

const intstudents = 3; // количествостудентов

const intexams = 4; // количествоэкзаменов

Int minimum(int [][exams], int, int);

Int maximum(int [][exams], int, int);

float average(int [], int);

Void printArray(int [][exams], int, int);

Соседние файлы в папке 2 Уровень повыше. Теоретика