【发布时间】:2013-08-04 15:05:35
【问题描述】:
我有这个:
unsigned int y = (unsigned int)(int*)foo;
如何获取存储在foo 指向的内存值中的地址?
让我们尝试更好地解释,假设它们是 int 类型:
int x = 10;
int *foo = &x;
unsigned int y = (unsigned int)(int*)foo;
int r = MAGIC(y); /* should be 10 */
x = 13; /* r still should be 10 */
y应该是x的地址,即10整数地址。
r 应该复制 y 位置的值,即10 整数。
所以x(如x = 13)的任何更改都不应更改值r。这只是一个 int。
问题是:我如何定义MAGIC?
【问题讨论】:
-
不,这不是问题。问题是,如果您已经拥有
foo,为什么还要这样做?使用整数存储地址在某些时候肯定会出错。我的意思是,如果您在一个地址为 64 位且无符号整数仅为 32 位的系统上怎么办? -
这就是
intptr_t存在的原因。 -
事实上,我知道这一点......因为我只是在测试它,我没有让所有代码都可移植。还有
ptrdiff_t,我以前也用过。
标签: c pointers memory-address