Можно создать указатель на первый элемент массива, указав имя массива без индекса. Пусть имеется
int sample [10];
Можно создать указатель на первый элемент массива, используя имя sample. Следовательно, следующий фрагмент присваивает переменной р адрес первого элемента массива sample:
int *p;
int sample[10];
p = sample;
Можно также получить адрес первого элемента массива с помощью оператора &. Например:
p = sample;
и
p = &sample[0];
Приводят к одинаковому результату. Тем не менее запись &sample[0] в профессиональных программах практически не встречается.
Индексация с помощью указателей
Указатели и массивы тесно связаны между собой. Как объяснялось выше, имя массива без индекса – это указатель на первый элемент массива. Пусть имеется массив
char p[100];
Выражение
p = = &p[0];
выдает истину, поскольку адрес первого элемента и адрес массива совпадают.
Справедливо и обратное. Любой указатель может быть проиндексирован, как будто это массив. Например:
int *p, i[10];
p = i;
p[5] = 100; /* присвоение с помощью индекса */
*(p+5) = 100;/* присвоение с помощью арифметики с указателями */
Оба оператора присваивания помещают значение 100 в шестой элемент массива i. Первый оператор использует индексацию с р, а второй – арифметику указателей. Так или иначе, результат одинаков.