Указатель на массив. Многомерные массивы динамической памяти.
Указатель на массив – это переменная, значением которой является адрес массив. Этому указателю доступен участок памяти, выделенный под массив. При прибавлении к такому указателю 1 получается значение адреса, большее на размер массива. Определение указателя на массив рассмотрим на примере определения указателя ptr на массив из 6 элементов типа int: int (*ptr) [6]; Выражение: (long)(ptr+1) - (long) ptr == 12 (байтов) возвращает размер массива в байтах, на который ''указывает'' указатель ptr. Многомерный динамический массив можно определить следующим образом: new тип массива, где тип массива – это тип элементов массива и нужное количество квадратных скобок, с константными выражениями, определяющие размеры массива. При таком определении существуют следующие правила: 1) при выделении памяти для динамического массива его размеры должны быть полностью определены. 2) нельзя явно инициализировать массив при динамическом выделении памяти. Определим трехмерный динамический массив типа int [3][2][4], Этот массив состоит из трех подмассивов - матриц 2х4. Определим указатель на подмассив – матрицу, типа int размером 2х4: int (*p) [2] [4]; C помощью операции new выделяется участок памяти для трех матриц, причем операция возвращает адрес первой матрицы массива, который и присваивается указателю p: p = new int [3] [2 ] [4 ] – выделена память для массива 3x2x4 типа int Чтобы освободить память, выделенную на массив, используем оператор: delete [ ] p; Формы обращения к элементам массива: p[i][j][k], либо *(*(*(ptr1+i)+j)+k). В операторе: cout << (long) (p+1) – (long) p; //16 - размер участка памяти, на который ''указывает'' указатель p. Определение типа массива имеет следующий вид:
typedef type имя_типа_массива [k1] [k2]..[kn]; Пример: typedef float array [3][5][2]; array – имя типа массива 3х5х2 с элементамитипа float array Mas; -определен массив Mas типа array.
Определение типа указателя на массив имеет следующий вид: typedef type (*имя_типа_указателя_на_массив) [k1] [k2]..[kn]; Пример: typedef float (*tpm) [5][2]; tpm – имя типа указателя на массив 5х2 с элементами типа float tpm pm; - объявлен указатель такого типа
|