【问题标题】:what kind of data structure is given to pointer?什么样的数据结构被赋予了指针?
【发布时间】:2019-01-11 05:40:39
【问题描述】:

为什么只有指针变量可以保存其他变量的地址?如果我们将任何变量的地址存储在简单变量中,那么它将该地址存储为值。指针变量设计了什么样的数据结构?

【问题讨论】:

  • 只有指针是专门设计用来保存另一个变量的地址的。通常,有一个整数类型(及其无符号对应物)可以保存一个对象地址——这些类型是intptr_tuintptr_t。你的第二句话不是很清楚。并非所有简单变量都可以保存地址值。很多时候,结果会截断部分地址。 (此外,函数指针的大小不必与对象指针的大小相同。)。没有特定的数据结构是“指针变量的设计”。
  • 可能重复[指针变量的数据类型是什么?] (stackoverflow.com/questions/26976496/…)
  • 指针可以指向任意但已定义的 C 类型(通常是一些 struct
  • 在第二句中,我想说的是,当我们在其他变量(不是指针变量)中分配变量的地址时,即 int var1=10, var2; var2=&var1;。它将保存地址,但作为值,如果地址很大(超出范围),它将截断另一部分。

标签: c pointers data-structures


【解决方案1】:

我相信你错过了指针也是一个类型,一个单独的,就像标准整数类型,浮点类型等一样。

引用C11,第 6.2.5 章

  • 指针类型可以派生自函数类型或对象类型,称为 引用类型。指针类型描述其值提供引用的对象 到被引用类型的实体。从引用类型 T 派生的指针类型 有时称为“指向 T 的指针”。 [...]

这种类型设计来保存另一种类型的地址(包括指针类型本身)。就像int 被设计用来保存整数值和doublefloat 用于浮点值一样。指针类型不需要或强制要求单独的数据结构,它只是被定义为能够将地址保存为指针变量的

FWIW,标题 stdint.h 中定义了其他类型,它们能够将地址作为值保存:

以下类型指定一个有符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为这种类型,然后再转换回指向 void 的指针, 结果将等于原始指针:

intptr_t

以下类型指定一个无符号整数类型,其属性是任何有效的 指向 void 的指针可以转换为这种类型,然后再转换回指向 void 的指针, 结果将等于原始指针:

uintptr_t

这些类型是可选的。

有关可能的用法,请参阅What is the use of intptr_t?

【讨论】:

  • 谢谢 saurav 的解释,但是请你告诉我指针变量的内存分配(作为指针变量的内存视图)。
  • @amit 你说的内存分配是什么意思?内存是怎么分配的?这取决于编译器 - 用于编译时间分配。如果问题是分配了多少内存 - 这再次取决于您的环境,通常(但是,不是通用的),指针的大小在 32 位环境中为 4,在 64 位环境中为 8
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2011-01-20
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
相关资源
最近更新 更多