gpt4 book ai didi

c - 如何获取 C 指针的物理地址作为值?

转载 作者:行者123 更新时间:2023-11-30 14:51:47 24 4
gpt4 key购买 nike

在我的系统中,

sizeof(void*) = 8 bytes

所有指针类型的大小均为 8 字节。

我有这个结构

struct element{void* value};

所以这个结构体只是一个8字节的指针值。

由于所有类型的指针都有 8 个字节,我应该能够将任何类型变量的物理地址分配给这个 void* 值

还有,

sizeof(double) = 8 bytes;

问题是如何获取任何指针的物理地址作为 double 值,然后将该值分配给任何其他 8 字节指针。

这么说

int i;
int *p = &i;
struct element e;
double phy_address = ?? // the 8 byte value of p (when we print it as %d)

/*now copy this 8 byte phy_address to 8 byte void pointer e.value. */

是否可以将其类型转换为 int* 或任何其他指针类型?它只是一个地址...

最佳答案

在大多数系统上,都有一个与 void * 大小相同的整数类型。通常这种类型是intlong intlong long int。大多数编译器将提供类型 intptr_t(及其无符号表兄弟 uintptr_t),它是其中一种类型的 typedef。我认为人们更喜欢使用 uintptr_t ,因为负地址值通常没有意义。无论如何,你应该使用这种类型而不是 double。

请记住,uintptr_t 只是常规整数类型之一,因此一旦将指针值放入此类型的变量中,您就可以执行任何您喜欢的整数算术。至于如何将指针值获取到uintptr_t中,请参阅这个问题/答案,Converting a non-`void` pointer to `uintptr_t` and vice-versa .

关于c - 如何获取 C 指针的物理地址作为值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48014821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com