【问题标题】:What is pointer to object type in C?什么是 C 中指向对象类型的指针?
【发布时间】:2016-12-27 09:17:41
【问题描述】:

例如,

int x = 10;

然后值10 保存在内存中的某个位置。我听说过“指向 int 对象的指针”,但我从未听说过“指向对象类型的指针”。这是否意味着存储10 的对象保存了有关存储在对象中的值类型的信息,并且“指向对象类型的指针”的值显示了该信息在内存中的存储位置?

【问题讨论】:

  • 它只是一种类型。 int*struct A {}*。而不是void*int(*)()struct A; struct A*。由于不完整(仅在 C 中),void 和函数类型不是对象类型。读为(pointer to object) type
  • 那么“指向int对象的指针”和“指向对象类型的指针”的概念是否相同?
  • 在 C++ 中有一个术语“对象指针类型”,其中包括 void*,但“指向对象类型的指针”不包括 void*。我认为 C 没有这种奇怪的混淆。跨度>
  • 我猜“(指向(对象类型)的指针)类型”在这里更明确但更令人困惑。

标签: c pointers object


【解决方案1】:

我认为提到“指向对象类型的指针”的文字是在谈论表示“指向对象的指针”的类型,即指向某物的指针。

这是否意味着存储10的对象保存了有关该对象中存储的值类型的信息

您在 C 中声明的变量的类型信息仅在编译程序的过程中相关。一旦你的程序被编译,类型信息就消失了。运行时没有类型信息可以存储在内存中。

这是 C99 标准提到“指向对象类型的指针”的地方:

6.5.2.1 数组下标

其中一个表达式的类型应为“指向对象类型的指针”,另一个表达式应为整数类型,结果的类型为“类型”

这意味着指针表达式必须是指向特定类型数据对象的指针。它不能是指向函数的指针,也不能是指向没有特定类型的数据的指针(即void*)。

【讨论】:

  • 哦,顺便说一句,你听说过“表达式计算为指向对象的指针”或“表达式计算为左值”的概念吗?实际上我问了这个问题是因为我无法理解这个概念(stackoverflow.com/questions/39051512/… - 阅读 R Sahu 的回答!)
  • @Jin "object" in "expression evaluates to pointer to object" 是说“它是一个指针,但不是一个函数指针,也不是一个void 指针”。 lvalue 表示可以使用= 运算符分配的任何表达式。
  • 那么 RSahu 的评论“array[index] 计算为一个对象,而不是一个指针”是一个不正确的陈述吗?根据你的回答,'array[index]' 应该评估为一个指针值,它指定一个浮点对象(如果数组被声明为 float array[10]
猜你喜欢
  • 2023-02-09
  • 2011-05-04
  • 2011-12-18
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多