为什么只有指针变量可以保存任何其他变量的地址?如果我们将任何变量的地址存储在简单变量中,则其将该地址存储为值。指针变量设计什么样的数据结构?
答案 0 :(得分:3)
我相信您遗漏了一点,即指针也是类型,是一个独立的指针,就像标准整数类型,浮点类型等一样。
引用C11
,第§6.2.5章
- 指针类型可以从函数类型或对象类型派生,称为 引用类型。指针类型描述了一个对象,其值提供了引用 到引用类型的实体。从引用类型T派生的指针类型 有时称为“ T的指针”。 [...]
此类型是设计的,用于保存其他类型的地址(包括指针类型本身)。就像int
用于保存整数值,而double
或float
用于保存浮点值一样。指针类型不需要或没有单独的数据结构,它只是被定义为能够将地址保存为指针变量的 value 。
FWIW,头文件stdint.h
中定义了其他类型,这些类型可以将地址保存为值:
以下类型指定一个带符号整数类型,该类型的任何有效属性 可以将指向void的指针转换为这种类型,然后再转换回指向void的指针, 结果将等于原始指针:
intptr_t
以下类型指定无符号整数类型,该类型的任何有效属性 可以将指向void的指针转换为这种类型,然后再转换回指向void的指针, 结果将等于原始指针:
uintptr_t
这些类型是可选的。
有关可能的用法,请参见What is the use of intptr_t?