【发布时间】:2023-02-09 23:24:27
【问题描述】:
在阅读 C11 标准时,我对术语“指向对象的指针”和“指向对象类型的指针”以及 在标准中使用这些术语的一致性。
根据我的理解:
- “指向对象的指针”是指针的值
- “指向对象类型的指针”是指针本身
这种理解是否正确?
现在考虑 C11,6.3.2.3p7(添加了重点):
A指向对象类型的指针可以转换为指向不同对象类型的指针。如果 结果指针未正确对齐 68) 对于引用类型,行为是 不明确的。否则,当再次转换回来时,结果应比较等于 原始指针。当一个指向对象的指针转换为指向字符类型的指针, 结果指向对象的最低寻址字节。
在这里我们看到术语“指向对象类型的指针”和“指向对象的指针”都与同一个动词“转换”一起使用。那么,到底转换了什么:指针的值还是指针本身?
另一个例子:C11, 6.5.6p7(添加了重点):
为了这些运营商的目的,一个指向对象的指针那不是一个元素 array 的行为与指向长度为 1 的数组的第一个元素的指针相同 对象的类型作为其元素类型。
考虑 C11,6.5.6p7(添加了重点):
int* x[1];数组
x究竟包含什么:“指向对象的指针”或“指向对象类型的指针”?
【问题讨论】:
-
“指针的值”和“指针本身”有什么区别?
-
因为
x[1]可以表示为*xint * x[1]可以表示为int **x,所以它会是一个指向指针的指针。一个指针指向一个对象类型,所以在这种情况下,指向一个对象类型的指针的指针,通过扩展也指向一个类型。 -
“指向对象类型的指针可以转换为指向不同对象类型的指针。”读作:“一个指针这是指向对象类型的指针”,即“一个指针它指向某物一个对象类型”,即“一个指针可以指向一个东西”。
标签: c pointers language-lawyer terminology