为什么我不能将一种类型的变量(比如说double)的地址分配给int类型的指针?

-2 c c++ pointers

在指针的情况下,我们知道它们的大小总是相同的,而与它指向的变量的数据类型无关.

取消引用指针时需要数据类型,以便它知道应该读取多少数据.那么为什么我不能将double类型的变量地址赋给int类型的指针?

为什么它不能发生像解引用一个int指针从double类型的变量读取接下来的4个字节并打印其值?

Jer*_*fin 6

许多计算机都有对齐要求,因此(例如)读取2字节值,它所在的地址必须是2的倍数(同样,4字节值必须位于一个倍数的地址4,依此类推).实际上,这种对齐要求很常见,它通常被称为"自然对齐".

同样,某些类型(例如,浮点类型)对可以作为该类型读取的位序列施加要求,因此如果您尝试获取某些任意数据并将其视为double,则可能会触发类似浮点异常的操作.

如果你想要做得非常糟糕,可以使用强制转换将指针转换为目标类型(但结果,如果有的话,通常不是可移植的).

您可以保证可以将指向任何其他类型对象的指针转换为指向unsigned char的指针,并使用它来读取表示指针对象的字节.

此外,如果您主要想要一个不透明的指针,而没有附加类型信息,您可以将指向其他类型的指针指定给a void *.

最后:不,并非所有指针实际上都是相同的.不同类型的指针可以是不同的大小(例如,在早期的Cray编译器上,a与a char *大不相同int *).