Существует тесная связь между массивами и указателями. Имя массива является указателем const-й и представляет собой стартовый адрес массива.
Пример:
int a [5];
Массив из 5-ти элементов, где а есть адрес нулевого элемента (& a[0]).
Пример: В массив заносятся элементы от 1 до 12, после чего выводится массив на экран.
# include <stdio h>
int main (void )
{ int t, i, num [3] [4];
/* загрузка чисел */
for (t=0, t<3; ++t);
for (i=0, i<4, ++i);
num [t] [i] = (t*4)+i+1;
/* вывод чисел */
for ( t=0; t<3, ++t) {
for ( i=0; i<4, ++i)
printf ( " % d ", num [t] [i]);
printf ( " \n ");
}
}
В C есть правила работы с указателями. Если к указателю прибавляется целое, компилятор автоматически масштабирует целое, умножая его на число байтов соответствующих типу, указанному в определении указателя. Любое действие, которое достигается индексированием массива, может быть выполнено с помощью указателей, причем быстрее с помощью указателей. Возможно размещение в памяти массива а.
1000 1002 1004 1006 1008-адрес
Символическое обозначение адреса 1000 в массиве - это а. К третьему элементу массива можно обратиться с помощью операции индексации (а [2]). Существует другой способ обращения к третьему элементу массива а. Это использование стартового адреса массива и операции сложения указателя с константой. Выражение: а+2 дает значение адреса 1004 (1000 + 2 * 2). Взяв значение по этому адресу можно добраться до третьего элемента массива а, т.е. *(а+2). Следовательно, обратиться, например, к i-тому элементу массива а можно с помощью выражения а [i] или *(а+i). Оба способа эквивалентны, но второй быстрее.