delete [размер_массива] указатель;
delete указатель;
B C++ каждая символьная строка представляется в виде одномерного массива, который заканчивается нулевым символом “\0”.
Многомерные массивы
Многомерный массив трактуется через понятие одномерного массива. Определение многомерного массива:
type имя_массива[k1][k2]…[kN];
где N – размерность массива, k1 – количество элементов размерности (N-1) каждый.
int m[4][3][6]; /*это одномерный массив из 4
элементов, каждый из которых имеет
тип int [3][6], т.е. является
двумерным массивом.*/
В памяти такой массив размещается в порядке возрастания самого правого индекса
array [3] array [0]
массив 3 на 6 |
… |
массив 3 на 6 |
ar[i][2] |
ar[i][0] |
|
Массив из 6 элементов |
… |
Массив из 6 элементов |
ar[i][j][5] |
ar[i][j][0] |
|
int |
… |
int |
<----------<----------------возрастание адресов----------<----------------
Инициализация многомерного массива с помощью списка инициализации
int ar[2][3]={1,2,3,4,5,6}
[0][2] |
[0][1] |
[0][0] |
3 |
2 |
1 |
[1][2] |
[1][1] |
[1][0] |
6 |
5 |
4 |
Имя массива – всегда константа-указатель. Для массива, определенного как
ar[N][M][L], ar – указатель, поставленный в соответствие элементам типа type [M][L]. Прибавление единицы к указателю ar увеличит значение указателя на массив на величину
sizeof(type)*M*L
В общем случае для трехмерного массива обращение к элементу приводит к следующему раскрытию ссылок:
ar[i][j][k]
*(*(*(ar+i)+j)+k)
Смещение:
ar+sizeof(type)*M*L
Динамические массивы
new имя_массива /*возвращает указатель, значением
которого служит адрес первого
элемента массива */
Динамические массивы не инициализируются, поэтому их размер должен быть явно определен при выделении памяти.
Описание указателя на массив:
type(*имя_массива)[константное выражение];
Пусть надо динамически выделить память для трехмерного массива:
1) Надо определить указатель на двумерный массив заданной размерности.
2) Выделить память под трехмерный массив
long(*lp)[2][4];
lp=new long[3][2][4];
Только самый левый индекс многомерного массива может быть переменной величиной, остальные индексы должны быть заданы как константы.
Избежать этого ограничения позволяет использование массива указателей.
Массивы указателей
Определение массива указателей:
new имя_массива
type *имя_массива[константное_выражение]
int *array[6]; // Массив указателей на объекты целого типа
int (*ptr)[6]; // Указатель на массив из 6-ти элементов типа int
(array+1) // увеличение на sizeof(int*)
(ptr+1) // увеличение на 12 байт, т.е.sizeof(int[6])
Создание и распечатка одномерного массива указателей на динамические строки, вводимые с клавиатуры
#include <stdio.h>
#include <string.h>
#include <alloc.h>
char *ReadString()
{
char *p;//указатель на символьный массив
char buffer [128];//буфер для чтения символов}
gets(buffer)
p=new char [strlen(buffer)+1]
strcpy(p,buffer);
return p;
}
void main()
{char * array[10];
int i;
for(i=0;i<10;i++) array[I]=ReadString();
for(i=0; i<10;I++) puts(array[i]);
}
Освобождение памяти, занятой массивом.
delete [ ] указатель;
delete [размерность_массива] указатель;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.