指针上下文中运算符*
和&
的正式名称是什么?它们似乎分别经常被称为解除引用运算符和运算符地址,但不幸的是,标准中关于一元运算符的部分没有命名它们。
我真的不想再命名&
地址,因为&
会返回指针,而不是地址。 (见下文)标准非常明确:
一元
&
运算符的结果是其操作数的指针。
Symmetry建议命名&
引用运算符,由于与C ++中的引用冲突,这有点不幸。 &
返回指针的事实建议指针运算符。是否有任何官方消息来证实这些(或其他)命名?
指针是一种语言机制,而地址是一种实现细节。地址是无类型的,而指针不是,void*
除外。 Kevlin Henney还区分了Interview中的指针和地址:
C [...]允许我们抽象机器的细节到我们谈论指针而不是地址的程度。你不再需要经历一连串的痛苦。
答案 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