Язык С




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


В языке "C" существует сильная взаимосвязь между указа- телями и массивами , настолько сильная, что указатели и мас- сивы действительно следует рассматривать одновременно. Любую операцию, которую можно выполнить с помощью индексов масси- ва, можно сделать и с помощью указателей. вариант с указате- лями обычно оказывается более быстрым, но и несколько более трудным для непосредственного понимания, по крайней мере для начинающего. описание

INT A[10]

определяет массив размера 10, т.е. Набор из 10 последова- тельных объектов, называемых A[0], A[1], ..., A[9]. Запись A[I] соответствует элементу массива через I позиций от нача- ла. Если PA - указатель целого, описанный как

INT *PA

то присваивание

PA = &A[0]

приводит к тому, что PA указывает на нулевой элемент массива A; это означает, что PA содержит адрес элемента A[0]. Теперь присваивание

X = *PA

будет копировать содержимое A[0] в X. Если PA указывает на некоторый определенный элемент мас- сива A, то по определению PA+1 указывает на следующий эле- мент, и вообще PA-I указывает на элемент, стоящий на I пози- ций до элемента, указываемого PA, а PA+I на элемент, стоящий на I позиций после. Таким образом, если PA указывает на A[0], то

*(PA+1)

ссылается на содержимое A[1], PA+I - адрес A[I], а *(PA+I) - содержимое A[I]. Эти замечания справедливы независимо от типа переменных в массиве A. Суть определения "добавления 1 к указателю", а также его распространения на всю арифметику указателей, сос- тоит в том, что приращение масштабируется размером памяти, занимаемой объектом, на который указывает указатель. Таким образом, I в PA+I перед прибавлением умножается на размер объектов, на которые указывает PA. Очевидно существует очень тесное соответствие между ин- дексацией и арифметикой указателей. в действительности ком- пилятор преобразует ссылку на массив в указатель на начало массива. В результате этого имя массива является указатель- ным выражением. Отсюда вытекает несколько весьма полезных следствий. Так как имя массива является синонимом местополо- жения его нулевого элемента, то присваивание PA=&A[0] можно записать как




Содержание  Назад  Вперед