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

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

Пусть объявлены одномерный целочисленный массив 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-11; просмотров: 611;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.