Иногда удобно иметь массив более чем с одним индексом, в С++ это допускается.
Многомерный массив может иметь любое количество индексов, но чащ всего только два. Двумерный массив удобно представить в виде таблицы, матрицы, в которой первый индекс будет определять строку, а второй – столбец:
Синтаксис
тип < имя> [размер1],[размер2],…,[размер_n]
Указатели в С++
Указателем называется адрес переменной в оперативной памяти. Переменная указательного типа (переменная-указатель или просто указатель) – это переменная, размер которой достаточен для хранения адреса памяти. Указатель объявляется с помощью символа «*», который добавляется после названия обычного типа данных.
тип (*имя) (список_типов_аргументов);
Например
int (*fun) (double, double);
задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую два аргумента типа double.
Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа (основного и составного). Простейшее объявление указателя на объект имеет вид:
тип *имя, где тип может быть любым, кроме ссылки и битового поля.
Пример
int *a, b, *c
описывается два указателя на целое с именамиa и c, а также целая переменная b
Примеры
int b; // целая переменная
const int b; // целая константа
int * b; //указатель на целую переменную
const int *pc; /указатель на целую константы
int *const cp=&i; //указатель-константа на целую переменную
const int * const cpc= &ci; //указатель-константа на целую константу
Для инициализации указателей использована операция получения адреса &.
Существуют следующие способы инициализации указателей:
§ с помощью имени массива или функции, которые трактуется как адрес:
int b[10]; // массив
int* t=b; // присваивание адреса начала массива
…
void f (int a) {/*…*/}; // определение функции
void (*pf) (int); // указатель на функцию
pf=f; // присваивание адреса функции
Присваивание пустого значения;
int* suxx= NULL;
int* number= 0;
Рекомендуется использовать значение 0, считается, что объектов с нулевым адресом нет, пустой указатель можно использовать для проверки, ссылается указатель на конкретный объект или нет.
Выделение участка динамической памяти и присваивание ее адреса указателю.
с помощью оператора new;
int* n = new int; //операция new выполняет размещения величины типа int участка динамической памяти и записывает адрес начала этого участка в переменную n
int* m = new int (10); //те же действия, производиться инициализация выделенной динамической памяти значения 10
int* q = new int[10]; //операция new выделение памяти под 10 величин типа int (массива из 10 элементов) и записывает адрес начала этого участка в переменную q
с помощью функции malloc ( библиотека <malloc.h>):
int* u = (int*)malloc (sizeof (int));
Операция new использовать предпочтительнее, чем функцию malloc
!! Если память выделяется с помощью операции new[ ], для освобождения памяти необходимо применить delete[ ].