Официальные названия для операторов указателя

Каковы официальные названия для операторов * и & в контексте указателей? Их, кажется, часто называют, разыменовывают оператор и операцию вычисления адреса соответственно, но к сожалению, раздел по унарным операторам в стандарте не называет их.

Я действительно не хочу называть & адрес - больше, потому что & возвращает указатель, не адрес. (см. ниже), стандарт очень соглашается с этим:

Результат унарного & оператор является указателем на свой операнд.

Симметрия предлагает назвать & ссылочный оператор, который является маленьким неудачником из-за коллизии со ссылками в C++. Факт это & возвращается указатель предлагает оператор указателя. Есть ли какие-либо официальные источники, которые подтвердили бы их (или другой) обозначения?

указатели по сравнению с адресами

Указатель является механизмом языка, в то время как адрес является деталью реализации. Адреса не вводятся, в то время как указатели не, за исключением void*. Kevlin Henney также различает указатели и адреса в Интервью:

C [...] позволяет нам абстрагировать специфические особенности машины до такой степени, что мы говорим об указателях и не адресах. Существует целая загрузка боли, которую Вы больше не должны проходить.

5
задан fredoverflow 21 March 2010 в 21:07
поделиться

3 ответа

Из черновика C99, по индексу:

* (косвенный оператор), 6.5.2.1, 6.5.3.2

& (оператор адреса), 6.3.2.1, 6.5.3.2

Из черновика C ++ 0x, по индексу:

* , см. оператор косвенного обращения, см. оператор умножения

и , см. оператор адресации, см. побитовый оператор AND

Он также упоминается в 9.6 / 3 «Оператор адресации & не должен применяться к битовому полю, поэтому нет указателей на битовые поля.»

(Итак, извините, вам все равно нужно вызвать & "address-of": p)

Лично меня не волнует настоящее имя, пока другие могут понять, о чем я говорю. Я просто называю * «звездой», а & «и». :)

12
ответ дан 18 December 2019 в 14:44
поделиться

Неправда.

& не возвращает указатель.

Указатель - это переменная типа указателя, которая может использоваться для хранения адреса. У указателя есть собственный адрес, обычно отличный от его значения, которое является адресом, который он содержит.

Таким образом, указатель имеет значение lvalue , а результат & p - нет.

Пример:

int *p, a, b;

p = &b; // valid, p is a pointer
&a = &b; // invalid, address is not a variable. lvalue required
-1
ответ дан 18 December 2019 в 14:44
поделиться

Официальными названиями являются адрес-of (&) (Найдено в 2.3.3. Указатели и массивы) и разыменование (или оператор косвенного обращения) (*) ( Нашел в 5.1.Pointers) операторы.

согласно "Язык программирования C ++", третье издание Бьярна Страуструпа.

2
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: