6

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

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

102) [……]

一元运算符取消引用指针的无效值包括* 空指针、与指向的对象类型不恰当对齐的地址以及对象在其生命周期结束后的地址

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

6.5.3.2 地址和间接运算符

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

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

— 对象的值由数组下标[]、成员访问.−>、地址&或间接*运算符或创建地址常量时的指针转换访问(6.6)。

那么在 C 中谈论“取消引用指针”是否正确,或者这是否过于迂腐?术语从何而来?[](由于第 6.5.2.1 节,我可以说被称为“尊重”)

4

4 回答 4

5
于 2014-12-12T15:03:36.290 回答
1

因为在 K&R C 的好时光里,该语言只通过值传递参数。所以指针被用来模拟通过引用传递参数。人们(错误地)谈到了对变量的引用来构造指向变量的指针。

指针的取消引用是相反的操作。

现在 C++ 使用不同于指针的真正引用,但仍然使用解引用这个词(即使它并不真正正确)。

于 2014-12-12T15:05:40.910 回答
0

Kernighan 和 Ritchie,C 编程语言,第 2 版,5.1:

一元运算符 * 是间接或取消引用运算符;[...] ''pointer to void'' 用于保存任何类型的指针,但不能自行取消引用。

于 2014-12-12T14:54:14.197 回答
0

我不知道确切的词源,但是可以将指针值(在一般意义上,而不是 C/C++ 特定的含义)视为“引用”内存中的另一个对象;也就是p x。当我们p用来获取存储在 中的值时x,我们正在绕过该引用或取消引用 p

于 2014-12-12T15:55:36.033 回答