Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Указатели и массивы



Имя массива трактуется как указатель-константа на массив.

Пусть, например, в программе объявлен массив:

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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...