指针运算符的正式名称

时间:2010-03-21 20:05:53

标签: c++ pointers

指针上下文中运算符*&的正式名称是什么?它们似乎分别经常被称为解除引用运算符运算符地址,但不幸的是,标准中关于一元运算符的部分没有命名它们。

我真的不想再命名& 地址,因为&会返回指针,而不是地址。 (见下文)标准非常明确:

  

一元&运算符的结果是其操作数的指针

Symmetry建议命名& 引用运算符,由于与C ++中的引用冲突,这有点不幸。 &返回指针的事实建议指针运算符。是否有任何官方消息来证实这些(或其他)命名?

指针与地址

指针是一种语言机制,而地址是一种实现细节。地址是无类型的,而指针不是,void*除外。 Kevlin Henney还区分了Interview中的指针和地址:

  

C [...]允许我们抽象机器的细节到我们谈论指针而不是地址的程度。你不再需要经历一连串的痛苦。

3 个答案:

答案 0 :(得分:12)

从C99草案中,在索引处:

  

*(间接运算符),6.5.2.1, 6.5.3.2

     

&(地址运营商),6.3.2.1, 6.5.3.2

从C ++ 0x草案中,在索引处:

  

*参见间接运算符,参见乘法运算符

     

&参见运营商地址,参见按位AND运算符

它也在9.6 / 3中引用“运算符地址&不应用于位字段,因此没有指向位字段的指针。”

(很抱歉,您仍然需要致电&“地址”:“p)

我个人并不关心实际名称,只要其他人能理解我在说什么。我只是致电*“明星”和&“和”。 :)

答案 1 :(得分:2)

官方名称是(&)(在2.3.3。指针和数组中找到)和解除引用(或间接运算符)(*)(在5.1.Pointers中找到)运算符的地址。

根据Bjarne Stroustrup的“The C ++ Programming Language”,第三版。

答案 2 :(得分:-1)

不正确。

&安培;不会返回指针。

指针是指针类型的变量,可用于包含地址。指针具有自己的地址,通常与其值不同,即它所拥有的地址。

因此,指针是左值,而& p的结果则不是。

示例:

int *p, a, b;

p = &b; // valid, p is a pointer
&a = &b; // invalid, address is not a variable. lvalue required