Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Идентификатор одномерного массива – это адрес памяти, начиная с которого он расположен, т.е. адрес его первого элемента. Таким образом, работа с массивами тесно взаимосвязана с применением указателей. Рассмотрим связь указателей с элементами одномерного массива на примере.
Пусть объявлены одномерный целочисленный массив 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; Прочитано: 186 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!