При определении массива ему выделяется память. После этого имя массива воспринимается как константный указатель того типа, к которому относятся элементы массива.
Исключения: sizeof(имя_массива); &имя_массива;
Указатели также используются при динамическом определении массивов:
тип указатель = new тип[размер];
Пример:
//Печать массива.
…
int n;
cin>>n;
int *a = new int[n]; /*Выделение в динамической памяти места под массив из n элементов */
for(int i = 0; i < n; i++){
cout << *(a + i) << “ “; //Проходим по эл-ам массива через указатель
delete []a; //Освобождаем выделенную память
…
Так как имя_массива – указатель константа, то его невозможно изменять, следовательно, *(a++) – недопустимая форма записи.
Пример:
#include <iostream>
#include <cmath>
#include <time.h>
using namespace std;
void main()
{
setlocale(0, "");
int dkpol = 0, dn, dk;
cout << "\n\nДИНАМИЧЕСКИЙ МАССИВ: \nВведите размерность массива не меньше '0': ";
cin >> dn;
int *din_mass = new int[dn];
cout << "\nНачальный массив: ";
srand(time(0));
for (i = 0; i < dn; i++){
*(din_mass + i) = rand() % 101 - 50;
cout << *(din_mass + i) << "\t";
}
cout << "\n\nВведите номер удаляемого эл-та: ";
for (i = numb; i < dn; i++)
*(din_mass + i) = *(din_mass + i + 1);
dn--;
cout << "Полученный массив: ";
if (numb == 0 && dn == 1)
cout << "Получен пустой массив.";
else
for (i = 0; i < dn; i++)
cout << *(din_mass + i) << "\t";
}