【发布时间】:2017-08-04 19:42:21
【问题描述】:
如果我们取消引用一个整数指针,比如 * (int * )
众所周知,整数指针在 64 位平台中占主导地位的 8 个字节。但整数在 64 平台上仍然需要 4 个字节。
如果我想取消引用一个指针,它的内存开头包含另一个指针地址。所以实际上我想取前 8 个字节的值。取消引用 * (int *) 会得到 4 字节还是 8 字节?我认为它应该是 4 字节,因为整数是 4 字节。但是我怎样才能在 64 位平台上获得 8 字节呢?不知道平台是32位还是64位。
【问题讨论】:
-
这有点难以理解。可以给我们一个小代码sn-p作为例子吗?
-
如果“其内存的开头包含另一个指针地址”,您需要通过指向指针的指针而不是指向 int 的指针取消引用它。如果某个地址的“事物”是另一个地址,那么指向指针的指针是到达(并最终通过)它的唯一合乎逻辑的方式。综上所述,这具有几乎令人难以抗拒的辛辣香气XY problem。你真正在做什么,你是如何将这个动物园作为你解决它的机制的?
-
如果你想强制使用 8 个字节,你可以使用
int64_t而不是int -
好像你想要一个指向指针的指针。或指向 64 位整数类型的指针。说清楚。
-
指针本身有多长并不重要,除非您只想像嵌入式编程中那样为其分配整数“地址”值。但即便如此,使用 uint64_t 等固定长度整数也很容易避免问题
标签: c pointers dereference