Официальные названия для операторов указателей - PullRequest
5 голосов
/ 21 марта 2010

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

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

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

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

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

Указатель - это языковой механизм, а адрес - деталь реализации. Адреса не набираются, а указатели - нет, за исключением void*. Кевлин Хенни также различает указатели и адреса в Интервью :

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

Ответы [ 3 ]

12 голосов
/ 21 марта 2010

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

* (оператор косвенного обращения), 6.5.2.1, 6.5.3.2

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

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

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

&, см. адрес-оператора, см. побитовый оператор И

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

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

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

2 голосов
/ 21 марта 2010

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

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

0 голосов
/ 21 марта 2010

Не верно.

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

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

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

Пример:

int *p, a, b;

p = &b; // valid, p is a pointer
&a = &b; // invalid, address is not a variable. lvalue required
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...