Применение указателей
Идентификатор массива – это адрес памяти, начиная с которого он расположен, т.е. адрес его первого элемента. Работа с массивами тесно связана с применением указателей.
Пусть объявлены массив a из 5 целочисленных элементов и указатель q на целочисленные переменные:
int a[5], *q;
ID массива a является константным указателем на его начало.
a
a[0] | a[1] | a[2] | a[3] | a[4] |
Здесь приведено символическое изображение оперативной памяти, выделенной компилятором для объявленного целочисленного массива а[5]. Указатель а содержит адрес его начала в оперативной памяти (ОП), т.е. «символический адрес»=4000 (а=4000).
Если выполнена операция: q=а; - присваивание константы переменной, т.е. q=4000 (аналог: q=&a[0]), то с учетом адресной арифметики выражения а[i] и *(q+i) приводят к одинаковым результатам – обращению к i-му элементу массива.
Идентификаторы а и q - указатели, очевидно, что выражения а[i] и *(а+i) эквивалентны. Отсюда следует, что операция обращения к элементу массива по индексу применима и при его именовании переменной-указателем. Таким образом, для любых указателей можно использовать две эквивалентные формы выражений для доступа к элементам массива: q[i] и *(q+i). Первая форма удобнее для читаемости текста, вторая - эффективнее по быстродействию программы.
Например, для получения значения 4-го элемента массива можно написать а[3] или *(а+3), результат будет один и тот же.
Очевидна эквивалентность выражений:
1) получение адреса начала массива в ОП:
&а[0] « &(*а) « а
2) обращение к первому элементу массива:
*а « а[0]
Последнее объясняет правильность выражения для получения количества элементов массива с объявленной размерностью:
type x[100]; // Размерность должна быть константой
...
int n = sizeof(x) / sizeof(*x);
Указатели, как и переменные любого другого типа, могут объединяться в массивы.
Объявление массива указателей на целые числа имеет вид:
int *a[10], y;
Теперь каждому из элементов массива можно присвоить адрес целочисленной переменной y, например: a[1]=&y;
Чтобы теперь найти значение переменной y через данный элемент массива а, необходимо записать *a[1].
Дата добавления: 2015-09-11; просмотров: 548;