C 指针的数据结构是什么?

C 指针的数据结构是什么?,c,pointers,data-structures,C,Pointers,Data Structures,为什么只有指针变量可以保存任何其他变量的地址?若我们将任何变量的地址存储在简单变量中,那个么它将该地址存储为值。指针变量设计的是什么样的数据结构?我相信您忽略了一点,指针也是一种类型,一种独立的类型,就像标准的整数类型、浮点类型等 引用第6.2.5章C11 指针类型可以从函数类型或对象类型派生,称为 引用类型。指针类型描述其值提供引用的对象 指向引用类型的实体。从引用类型T派生的指针类型 有时称为“指向T的指针”。[……] 此类型用于保存另一类型(包括指针类型本身)的地址。就像int用于保存

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

我相信您忽略了一点,指针也是一种类型,一种独立的类型,就像标准的整数类型、浮点类型等

引用第6.2.5章C11

  • 指针类型可以从函数类型或对象类型派生,称为 引用类型。指针类型描述其值提供引用的对象 指向引用类型的实体。从引用类型T派生的指针类型 有时称为“指向T的指针”。[……]
此类型用于保存另一类型(包括指针类型本身)的地址。就像
int
用于保存整数值,而
double
float
用于保存浮点值一样。指针类型不需要或强制使用单独的数据结构,它只是定义为能够将地址作为指针变量的值

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

以下类型使用任何有效的属性指定有符号整数类型 指向void的指针可以转换为此类型,然后再转换回指向void的指针, 结果将与原始指针进行比较:

intptr_t
uintptr_t
以下类型使用任何有效的属性指定无符号整数类型 指向void的指针可以转换为此类型,然后再转换回指向void的指针, 结果将与原始指针进行比较:

intptr_t
uintptr_t
这些类型是可选的


有关可能的用法,请参见

只有指针专门用于保存另一个变量的地址。通常,有一个整数类型(及其无符号对应项)可以保存对象地址,这些类型是
intptr\u t
uintptr\u t
。你的第二句话不太清楚。并非所有简单变量都可以保存地址值。通常,结果会截断部分地址。(此外,函数指针不必与对象指针大小相同。)。没有特定的数据结构是“指针变量的设计”。可能重复的[指针变量的数据类型是什么?)()指针可以指向任意但定义的C类型(通常是某些
struct
),在第二句话中,我想说的是,当我们在其他变量中分配变量的地址时(不是指针变量)即int var1=10,var2;var2=&var1;。它将保存地址,但作为值,如果地址较大(超出范围),则会截断另一部分。感谢saurav的解释,但请告诉我指针变量的内存分配(作为指针变量的内存视图).@amit内存分配是什么意思?内存是如何分配的?这取决于编译器-用于编译时分配。如果问题是分配了多少内存-这再次取决于您的环境,通常(但不是通用的),指针大小在32位环境中为4,在64位环境中为8