这个问题将从草案N1570中提取信息,所以基本上是C11。
通俗地说,取消引用指针意味着将一元*
运算符应用于指针。草案文件中只有一个“解除引用”一词的地方(没有“解除引用”的例子),它在脚注中:
102)[...]
由一元
*
取消引用指针的无效值 operator是一个空指针,一个不恰当地对齐的地址 指向的对象类型,以及对象后面的地址 生命的终结
据我所知,一元*
运算符实际上被称为“间接运算符”,如§6.5.3.2所示:
6.5.3.2地址和间接运算符
4
一元*
运算符表示间接。 [...]
同样地,它在附件§J.2中被明确地称为间接运算符:
- 对象的值由数组下标
[]
访问, 成员访问.
或−>
,地址&
或间接*
运营商或 在创建地址常量(6.6)时强制转换的指针。
在C中谈论“解除引用指针”是正确的还是过于迂腐?术语来自哪里? (由于§6.5.2.1,我可以给[]
传递称为“引用”
答案 0 :(得分:1)
因为在K& R C过去的好时光,语言只按值传递参数。因此,指针用于通过引用模拟传递参数。并且人们(错误地)提到了对变量的引用以构造指向变量的指针。
指针的解除引用是相反的操作。
现在C ++使用与指针不同的真正引用,但仍然使用 dereference 这个词(即使它不是真的正确)。
答案 1 :(得分:0)
Kernighan和Ritchie, C编程语言,第2版,5.1:
一元运算符*是间接或解除引用运算符; [...]''指向void'的指针用于保存任何类型的指针,但不能自行解除引用。
答案 2 :(得分:0)
我不知道确切的词源,但可以考虑一个指针值(在一般意义上,而不是C / C ++特定含义)作为"引用"记忆中的另一个对象;也就是说,p
指的是 x
。当我们使用p
获取x
中存储的值时,我们会绕过该引用,或者取消引用 p
。