Язык программирования C

Скачать в pdf «Язык программирования C»

5.1. Указатели и адреса


Начнем с простейшего представления о том, как организована память. Типичная компьютерная система содержит массив последовательно пронумерованных (адресуемых) ячеек памяти, с которыми можно работать по отдельности либо целыми непрерывными группами. Так, один байт может хранить переменную типа char, два соседних байта— целую переменную типа short int, а четыре байта— переменную типа long. Указатель представляет собой группу ячеек (две или четыре), которые могут содержать адрес. Например, если с — переменная типа char, ар — указатель, который на нее указывает, это можно представить следующим образом:

Одноместная {унарная) операция & дает адрес объекта. Поэтому поместить адрес переменной с в переменную р можно следующим образом:


Р = &С;


В этом случае говорят, что р указывает на с. Операция & применима только к объектам, хранящимся в оперативной памяти: переменным и элементам массивов. Ее нельзя применить к выражениям, константам и регистровым переменным (register).


Одноместная операция * называется операцией ссылки по указателю (indirection) или разыменования (dereferencing). Применяя ее к указателю, получаем объект, на который он указывает. Предположим, что х и у — целые переменные, a ip — указатель на целую переменную. В следующем фрагменте кода (довольно искусственном) показано, как объявляется указатель и как используются операции & и *: int X = 1, у = 2, z [ 10] ;


int *ip;    /* ip — указатель на int */


/* ip теперь указывает на x */


/* у теперь равно 1 */


/* х теперь равно 0 */


/* ip теперь указывает на z[0] */

Скачать в pdf «Язык программирования C»