【问题标题】:Data type of addresses [closed]地址的数据类型
【发布时间】:2014-07-19 11:37:13
【问题描述】:

c 或 c++ 中任何地址的数据类型是什么?它是无符号整数还是有符号整数? 指针指向它们指向的相应数据类型的位置。 它可以是 char 或 int 或 float 任何东西,但我在这里想问的是 RAM 中任何语言的地址的数据类型是什么。

【问题讨论】:

  • 您的意思是,您想知道指针的实际大小和布局是多少?指针本身就是数据类型,它们以字节和位表示的实际表示取决于实现和机器架构。
  • 它既不是无符号整数也不是有符号整数。指针就是指针。
  • 问什么东西在RAM中的数据类型是没有意义的。它只是一个字节序列,就像其他任何东西一样。重要的是如何解释这些字节序列。在 C++ 中,指针被解释为T*,其中T 是它指向的对象的类型。这种解释的含义由 C++ 标准定义。所以指向int 的指针是int* - 仅此而已。

标签: c++ c


【解决方案1】:

地址是一个简单的整数数值,它指向一个内存位置。 “类型”的概念是一种语言强加——在机器级别,地址和数据都是简单的数字(因此称为数字计算机)。

以位数表示的地址宽度取决于具体的硬件架构。

指针和地址不一定是同一个东西——一些体系结构有分页或分段内存寻址方案,这可能意味着关系并不那么简单。例如,16 位 x86 具有 nearfar 指针的概念,以及允许 16 位或 32 位指针的分段寻址方案,每个指针都可以解析为 20 位物理地址。

【讨论】:

    【解决方案2】:

    C 中的地址是一个指针值。

    例子:

    int a = 42;
    

    a 的地址是&a,类型为int *

    【讨论】:

      【解决方案3】:

      地址没有类型。它是具有在定义时指定的类型的指针。 至于地址,例如,它们不能使用等效整数表示的所有位。例如,地址的最高字节的最高有效位可能包含一些垃圾。实现定义了可以寻址的地址空间范围。 但无论如何,如果您要将地址重新解释为某个整数值,那么使用无符号类型在逻辑上会更好。

      【讨论】:

        【解决方案4】:

        地址基本上以十六进制格式表示。地址没有特定的数据类型。 要在 C 语言中打印地址,您需要使用 %p 格式说明符。它不会给出任何警告。如果您使用%u 格式说明符作为地址,它会给出警告。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-04
          • 1970-01-01
          • 1970-01-01
          • 2010-12-23
          • 1970-01-01
          • 2015-07-28
          • 2013-10-13
          • 2012-08-01
          相关资源
          最近更新 更多