【问题标题】:"Pointer to an object" vs. "pointer to an object type"\“指向对象的指针”与“指向对象类型的指针”
【发布时间】: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


【解决方案1】:

“指向对象类型的指针”谈到在编译时确定的指针类型。对象类型是函数类型(C11 6.2.5 类型/1)以外的任何类型,因此它们表示指向函数以外的任何对象的指针。

“指向某某对象的指针”谈到指针的运行时值(它指向哪个对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多