【问题标题】:Why there is different types of pointers? [duplicate]为什么会有不同类型的指针? [复制]
【发布时间】:2017-02-08 07:46:29
【问题描述】:

首先,如果这个问题很愚蠢,我很抱歉 我是 C/C++ 的初学者

我的问题是:

为什么当我想指向一个像 (char x = 'A') 这样的 char 变量时,我应该创建一个 char 数据类型的指针?喜欢这个(char * pnt = &x)?我认为地址应该始终是内存中任何位置的整数,因此我的示例中的变量 x 在转换(65)到某个地址中的二进制系统后像这种格式(01000001)一样存储在 RAM 中.. 所以有一个 char 的地址输入??

我没有理解这个概念,有什么解释吗?

【问题讨论】:

  • 在下面,它们都只是指向内存的指针,并且工作方式相同。类型系统是 C++ 顶层的一部分,它可以帮助您确保不会错误地将 int 访问为 float。内存本身无法区分。
  • 通过这种方式,可以在编译时进行类型检查,并防止你(或至少它试图防止你)犯错。
  • 所以有一个char类型的地址 NO.内存地址总是整数。这里,char * pnt = &x 表示变量pnt 存储包含char 类型数据的内存位置的地址(始终为整数)。因此,不同的指针类型告诉编译器存储在指针指向的内存位置的数据的类型。

标签: c++ c pointers


【解决方案1】:

这是因为 C/C++ 中的强类型。这是范式之一(例如,python 使用不同的范式),但在 C++ 中是唯一可能的。您实际上可以使用有关指针类型的知识并在类型之间转换指针。使用 static_cast、dynamic_cast 等来执行此操作。此外,如果您使用 C,您可以定义一个指向“某物”的指针 - void*。这可以指向 char、int 或您可以想象的其他类型。注意:这种转变应该是有意识的。这可能是不良架构或其他问题的征兆。

【讨论】:

  • 这是因为分配给不同数据类型的大小不同。因此,如果它是一个整数,将分配 2 个字节,对于 char,它是 1 个字节。数据类型被赋予指针以告诉它应该读取多少字节。这称为解引用,以便指针知道它应该从它指向的地址读取多少数据。
  • 是的,很好。出于某种原因,我假设并没有在我的回答中指出这一点。谢谢!
  • 如果没有适当的大小,指针算术也将无法工作。
猜你喜欢
  • 2023-04-02
  • 2012-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多