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

Связь указателей и массивов



Идентификатор одномерного массива – это адрес памяти, начиная с которого он расположен, т.е. адрес его первого элемента. Таким образом, работа с массивами тесно взаимосвязана с применением указателей. Рассмотрим связь указателей с элементами одномерного массива на примере.

Пусть объявлены одномерный целочисленный массив a из 5 элементов и указатель p на целочисленные переменные:

int a [5]={1, 2, 3, 4, 5}, * p;

ID массива a является константным указателем на его начало, т.е. а = & a [0] – адрес начала массива. Расположение массива а в оперативной памяти, выделенной компилятором, может выглядеть следующим образом:

a [0] a [1] a [2] a [3] a [4] – элементы массива;
          – значения элементов массива;
          – символические адреса.

Указатель а содержит адрес начала массива и в нашем примере равен 4000 (а = = 4000).

Если установить указатель р на объект а, т.е. присвоить переменной-указателю адрес первого элемента массива:

р = а;

что эквивалентно выражению р = & a [0]; то получим, что и р = 4000. Тогда с учетом адресной арифметики обращение к i -му элементу массива а может быть записано следующими выражениями:

а [ i ] ~ *(а + i) ~ *(р + i) ~ р [ i ],

приводящими к одинаковому результату.

Идентификаторы а и р – указатели, очевидно, что выражения а [ i ] и *(а + i) эквивалентны. Отсюда следует, что операция обращения к элементу массива по индексу применима и при его именовании переменной-указателем. Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: р [ i ] и *(р + i). Первая форма удобнее для читаемости текста, вторая – эффективнее по быстродействию программы.

Например, для получения значения 4-го элемента массива можно написать а [3] или *(а +3), результат будет один и тот же, а операции a [3] = 8 и *(р +3) = 8 дадут тождественный результат, т.к. р +3 = 4000+3* sizeof (int) = = 4000+3*2 = 4006, т.е. указатель р установлен на четвертый по счету элемент массива.

Очевидна и эквивалентность выражений:

– получение адреса начала массива в ОП:

& а [0] «&(* а) «а

– обращение к первому элементу массива:

* а «а [0]

Последнее утверждение объясняет правильность выражения для получения количества элементов массива:

int x[]={1, 2, 3, 4, 5, 6, 7};

Размер n должен быть целочисленной константой:

int n = sizeof(x) / sizeof(*x);





Дата публикования: 2015-09-17; Прочитано: 185 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



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