Указатель как элемент архитектуры компьютера
Возможен также случай, когда машинное слово содержит адрес другого машинного слова. Тогда доступ к данным во втором машинном слове через первое называется КОСВЕННОЙ АДРЕСАЦИЕЙ. Команды косвенной адресации имеются в любом компьютере и являются основой любого регулярного процесса обработки данных.
В языках программирования имя переменной обычно ассоциируется с адресом области памяти, в которой транслятор размещает ее в процессе трансляции программы. Поэтому все операции над переменными базовых типов данных преобразуются в команды с прямой адресацией к соответствующим словам памяти.
УКАЗАТЕЛЬ -- переменная, содержимым которой является адрес другой переменной.
Соответственно, основная операция для указателя - это косвенное обращение по нему к той переменной, адрес которой он содержит. В дальнейшем будем пользоваться такими терминами:
-указатель, который содержит адрес переменной, ССЫЛАЕТСЯ на эту переменную или НАЗНАЧЕН на нее;
-переменная, адрес которой содержится в указателе, называется УКАЗУЕМОЙ переменной.
В Си имеется специальная операция - "*" , которую называют КОСВЕННЫМ ОБРАЩЕНИЕМ ПО УКАЗАТЕЛЮ и которая является аналогом косвенной адресации. Кроме того, имеется операция "&" , которая дает адрес переменной, перед именем которой она поставлена. Все это позволяет повторить изображенный выше пример с косвенной адресацией с использованием средств языка Си:
Если же эту "картинку" перевести на определения и операции языка, то получим следующее:
int a,x; // Обычные целые переменнные
int *p; // Переменная - указатель на другую
// целую переменную
a = 2000;
p = &a; // Указатель содержит адрес переменной a
x = x + *p; // При косвенном обращении по указателю p
// берется значение указуемой переменной a