1) Элементы массива нумеруются, последовательно начиная с нуля.
2) Имя массива является константой указателя, содержащим адрес первого элемента массива. Поэтому нельзя к имени массива применять операции языка. Например: ++ или - -. Чтобы избежать ошибок, надо описать переменную типа указатель того же типа, что и массив и присвоить ей адрес 1-го элемента массива.
Пример:
int а[10]; * p;
a++; /* ошибка * /
p=a
p++;
3) В случае применения операции увеличения указателя переменной, содержащий стартовый адрес массива, получаем адрес следующего элемента массива, т.е. увеличение значения указателя производится не на единицу, а на размер в байтах одного элемента массива.
4) Определение int a[]; эквивалентны
int * a;
Оба определения говорят, что а является указателем на целое
5) В случае многомерных массивов константное выражение, определяющее размеры массива можно опустить только для первого размера. Для всех последующих размеров оно обязательно должно присутствовать. Такое описание многомерного массива может присутствовать в описании списка параметра в функции.
Пример:
int a;
int b[ ][b];
fun (a, b);
При этом вызывающей функцией обязательно должен быть определен двухмерный массив, адрес которого передается в функцию fun ().
Например:
int mas [3] [6];
fun (d, mas);
6) Следует различать выражения char (* fun) ( );
char * fun ( );
В первом случае определяется указатель на функцию. Второй оператор описывает функцию, возвращающую указатель на символ.
P.S. Указатели и функции подробнее будут рассмотрены далее.