“" dereferencing"这个词在哪里?来自?

时间:2014-12-12 13:58:30

标签: c pointers language-lawyer nomenclature

这个问题将从草案N1570中提取信息,所以基本上是C11。

通俗地说,取消引用指针意味着将一元*运算符应用于指针。草案文件中只有一个“解除引用”一词的地方(没有“解除引用”的例子),它在脚注中:

  

102)[...]

     

由一元*取消引用指针的无效值   operator是一个空指针,一个不恰当地对齐的地址   指向的对象类型,以及对象后面的地址   生命的终结

据我所知,一元*运算符实际上被称为“间接运算符”,如§6.5.3.2所示:

  

6.5.3.2地址和间接运算符

     

4一元*运算符表示间接。 [...]

同样地,它在附件§J.2中被明确地称为间接运算符:

  

- 对象的值由数组下标[]访问,   成员访问.−>,地址&或间接*运营商或   在创建地址常量(6.6)时强制转换的指针。

在C中谈论“解除引用指针”是正确的还是过于迂腐?术语来自哪里? (由于§6.5.2.1,我可以给[]传递称为“引用”

3 个答案:

答案 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