Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Имя массива трактуется как указатель-константа на массив.
Пусть, например, в программе объявлен массив:
int Х[10];
В таком случае х является указателем на нулевой элемент массива в памяти компьютера, В связи с этим истинным является отношение
Х==&Х[0]
Отсюда следует, что для доступа к элементам массива кроме индексированных имен можно использовать разадресованные указатели по принципу:
имя [индекс] тождественно * (имя + индекс)
Например, для описанного выше массива х взаимозаменяемы следующие обозначения элементов:
Х[5], или *(Х+5), или *(5+Х).
Напоминаем, что для указателей работают свои правила сложения. Поскольку х — указатель на величину целого типа, то х+5 увеличивает значение адреса на 10.
В языке Си символ [ играет роль знака операции сложения адреса массива с индексом элемента массива.
Из сказанного должно быть понятно, почему индекс первого
элемента массива всегда нуль. Его адрес должен совпадать с адресом массива:
Х[0]==*(Х+0)
Поскольку имя массива является указателем-константой, то его нельзя изменять в программе, т. е. ему нельзя ничего присваивать. Например, если описаны два одинаковых по структуре массива
int Х[10], У[10];
то оператор присваивания х=y будет ошибочным. Такое возможно в Паскале, но недопустимо в Си. Пересылать значения одного массива в другой можно только поэлементно.
Теперь рассмотрим двумерные массивы. Пусть в программе присутствует описание:
int Р[5][10];
Это матрица из пяти строк и десяти чисел в каждой строке. Двумерный массив расположен в памяти в последовательности по строкам. По-прежнему Р является указателем-константой на массив, т. е. на элемент Р [ 0 ] [ 0 ]. Индексированное имя Р [ i ] обозначает i-ю строку. Ему тождественно следующее обозначение в форме разадресованного указателя:
*(Р+i*10)
Обращение к элементу массива Р [ 2 ] [ 4 ] можно заменить на *(Р+2*10+4). В общем случае эквивалентны обозначения:
Р[1] [ j ] И *(Р+i*10+j)
Дата публикования: 2014-11-02; Прочитано: 267 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!