#cpp #c
Пример кода: int x = 10; int *p = &x; // reference - получение адреса объекта x int y = *p; // dereference - получение объекта по указателю p Во многих книгах на русском при переводе dereference используют термин "разыменовать". Насколько я понимаю значение слова "разыменование" - это лишение имени. Но тут вроде никого имени не лишают. Другой вариант перевода который мне встречался - "снятие косвенности". Этот вариант уже ближе по смыслу к оригиналу. Так почему же "разыменование"?
Ответы
Ответ 1
На самом деле - перевод совершенно правильный. Смотрите, что получается: Любой объект в любом языке программирования состоит из двух неразрывных сущностей: Значения (что бы мы под этим не понимали) Имени этого значения Во многих языках программирования типа С различие между этими сущностями не подчёркивается. Так например, во многих языках можно написать нечто вроде: a := a + 7; Здесь одна и та же лексема "а" используется в разных смыслах. Справа - как значение, слева - как имя. Начинающие программисты зачастую этого не осознают. В некоторых языках это различие делается явным. Например, в языке Shell имя переменной может быть "A", а значение - "${A}". Возвращаясь к Вашему вопросу. Во многих языках программирования существует особый тип переменных, значениями которых являются имена других переменных. Ведь что такое ссылка (указатель) ? Это машинный адрес - имя ячейки, содержащей значение. Поэтому "разыменовать" означает - сказать процессору, что значение данной переменной надо превратит в имя некоторой другой переменной. Вот так: int a; int *pa = &a; a = 3; *pa = a + 4; Результат довольно очевиден. А на самом деле, мы сказали процессору, что: Хотя pa стоит слева от знака присваивания, но её имя нас не интересует. Нам нужно имя некоторой другой переменной, заданной её значением. Фактически, в данном примере имя pa изчезает! Она "разыменовывается".
Комментариев нет:
Отправить комментарий