C 这个词在哪里;“取消引用”;来自

C 这个词在哪里;“取消引用”;来自,c,pointers,language-lawyer,nomenclature,C,Pointers,Language Lawyer,Nomenclature,这个问题将从草稿中提取信息,因此C11基本上是 通俗地说,取消对指针的引用意味着对指针应用一元*运算符。文件草案中只有一处有“取消引用”一词(没有“取消引用”的情况),这是在脚注中: 102)[……] 一元* 运算符是一个空指针,一个地址不适当地对齐 指向的对象的类型,以及 生命的尽头 据我所见,一元*运算符实际上被称为“间接运算符”,如§6.5.3.2所示: 6.5.3.2地址和间接运算符 4一元*运算符表示间接寻址。[……] 类似地,附件§J.2中明确称其为间接运算符: -对象的值由数组下标

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

通俗地说,取消对指针的引用意味着对指针应用一元
*
运算符。文件草案中只有一处有“取消引用”一词(没有“取消引用”的情况),这是在脚注中:

102)[……]

一元
*
运算符是一个空指针,一个地址不适当地对齐 指向的对象的类型,以及 生命的尽头

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

6.5.3.2地址和间接运算符
4
一元
*
运算符表示间接寻址。[……]

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

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

那么,在C语言中谈论“去引用指针”是正确的还是过于迂腐?这个术语是从哪里来的?(由于§6.5.2.1,我可以略过被称为“延迟”的
[]

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

一元运算符*是间接运算符或解引用运算符;[…]“指向void的指针”用于保存任何类型的指针,但不能取消对其本身的引用

K&R v1 如果看一下C编程语言,在第一版(1978年)中,使用了术语“间接”

例子

2.12评估的优先级和顺序

[……]

第5章讨论*(间接)和&(地址)

,

7.2一元运算符

[……]

一元*运算符表示间接:表达式必须是指针,而 结果是一个左值,它引用表达式指向的对象

它也列在索引中,例如

第5.1节的较长摘录

5.1指针和地址

由于指针包含对象的地址,因此可以通过指针“间接”访问对象。 假设
x
是一个变量,比如
int
,而
px
是一个变量 指针,以某种尚未指定的方式创建。一元运算符c 提供对象的地址,因此

px = &x;
 p := q;
x
的地址分配给变量
px;px
现在被称为 “指向”
x
。&运算符只能应用于变量 和数组元素;像
&(x+1)
&3
这样的构造是非法的。信息技术 获取寄存器变量的地址也是非法的

一元运算符
*
将其操作数视为远离最终目标的地址,并访问该地址以获取内容。因此 如果
y
是一个
int

y = *px;
px
指向的内容分配给
y
。所以 序列

px = &x;
y = *px;
将相同的值指定给y,与

y = x;
K&R v2 在第二版中,术语去引用出现了

5.1指针和地址

一元运算符*是间接运算符或解引用运算符;当应用于指针时,它访问指针指向的对象。假设x和y是整数,ip是指向int的指针。这个人工序列显示了如何声明指针以及如何使用&和*:

[……]


先前使用 然而,该术语的历史更为久远,如

,1974年。例如,第24/25页。此处与ALGOL 68、PASCAL、SIMULA 67相关

语言将指针转换为值的机制是 被称为“取消引用”,一种胁迫形式(稍后讨论)。考虑语句

px = &x;
 p := q;
根据p和q的类型,有几种可能的解释

设“@”为解引用运算符(即,如果p指向j,则@p与j相同),并且 “#”是一个引用操作(即,如果p指向j,则p与#j相同)。这个 下表指出了一种语言为执行 任务:

                       |                                         
                       |   type of p                             
                       |                                         
                       |   t         ref t     ref ref t . . .   
                       |                                         
        ---------------------------------------------------------
                       |                                         
           t           |  p←q        p←#q       p←##q            
                       |             @p←q       @p←#q            
                       |                        @@p←q            
type                   |                                         
of                     |                                         
q          ref t       |  p←@q       p←q        p←#q             
                       |             @p←@q      @p←q             
                       |                        @@p←@q           
                       |                                         
                       |                                         
           ref ref t   |  p←@@q      p←@q       p←q              
             .         |             @p←@@q     @p←@q            
             .         |                        @@p←@@q          
             .         |                                         
                       |                                         
                       |                                         
[……]


造币 它的用法还有其他几个例子。但我无法找到它的确切位置和时间(至少目前还没有)。(1974年的论文至少很有趣。)


出于乐趣,查看邮件列表(如net.unix-wizards)通常也很有用。A(1983年11月28日):

去引用空指针是另一个白痴 编写“可移植”代码,但前提是他们的机器是 只有一个能让它运行:和设计它的人一样 具有二进制头的cpio。 即使在VAX上,取消对NULL的引用也会导致垃圾:当然,*(char*)NULL 和*(short*)NULL返回0,但*(int*)NULL将返回0 1024528128 !!!!.

[……]


Ed1。附加 不提"去参考",但仍然是,;一本有趣的读物是里奇:

这里也一直使用“间接”一词,但是/和/等。语言之间的联系有点详细。因此,鉴于上述类似1974年的论文,该术语的使用非常有趣

作为间接寻址概念和语法的示例,请阅读例如pp 12 ev

句法上的一次意外导致了认知的co