Указатели представляют эффективный способ обработки массивов. В языке С/С++ между указателями и массивами существует тесная связь. Например, когда объявляется массив в виде int array[5], то компилятор не только выделяет память для пяти элементов массива, но и создает указатель с именем array, инициализирует его адресом первого по счету (нулевого) элемента массива. Таким образом, сам массив остается безымянным, а доступ к его элементам осуществляется через указатель с именем array. С точки зрения синтаксиса языка указатель array является константой, значение которой можно использовать в выражениях, но изменить это значение нельзя. Например:
array = = &array[0];
Для доступа к элементам массива существует два различных способа. Первый способ связан с использованием обычных индексных выражений в квадратных скобках, например:
array[2].
Второй способ доступа к элементам массива связан с использованием адресных выражений в форме *(array+2). При реализации на компьютере первый способ приводится ко второму, т.е. индексное выражение преобразуется к адресному. Для приведенного примера array[2] преобразуется в *(array+2).
Для доступа к начальному элементу массива (т.е. к элементу с нулевым индексом) можно использовать просто значение указателя array. Любое из присваиваний
*array = 2;
array[0] = 2;
*(array+0) = 2;
присваивает начальному элементу массива значение 2, но быстрее всего выполнятся присваивание *array=2 так как в нем не требуется выполнять операции сложения.
Отметим главные различия между инициализацией символьного массива, хранящего строку, и инициализацией указателя, указывающего на строку, на следующем примере:
#include<stdio.h> // подключение заголовочных файлов
#include<math.h>
void main(void)
{
char mas[ ]="Одномерный массив"; // константа
char *m = "Строка символов"; // переменная
// Вывод посимвольно константы как элементов массива:
for(int i=0;i<17;i++) putchar(mas[i]);
putchar(‘n‘);
// Вывод посимвольно константы с помощью инкремента указателя:
for (i=0;i<17;i++) putchar (*(mas+i));
putchar(‘n‘);
// Вывод посимвольно переменной с помощью цикла for:
for (i=0;i<15;i++) putchar (*(m+i));
putchar(‘n‘);
// Вывод посимвольно переменной с помощью цикла while:
while (*(m)!=’