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