我有一个指针char *a
指向一 block 内存。我有另一个指向内存块的指针char *b
。假设 b 指向地址0x10001111
。我想把这个地址写入a指向的内存块的下8个字节。简而言之,当我引用 a 时,我应该获得接下来的 8 个字节的内存和值 = 0x10001111
。我怎么做?这是一台 x86_64 机器。
我当前的代码:
static void write_add(void *a, char *b)
{ *(unsigned long *)a= (unsigned long)b;
*(unsigned long *)a= (unsigned long)b;
return;
}
在取消引用 a 时,我只看到 0x00001111。为什么我看不到完整的地址?
最佳答案
为什么要涉及一个单独的、不相关的、大小不确定的类型?如果您想将指针值存储在 8 个字节中(并且假设该值适合 8 个字节),您可以像这样拼写:
#include <stdint.h>
static void write_add(void *a, char *b) {
*(uint64_t *) a = (uint64_t) b;
}
您也可以使用memcpy()
,但这似乎有点粗暴。
但是请注意,C 不保证指针值表示的大小。尽管 64 位可能在您的系统上就足够了,但您不能放心地假设它在每个系统上都足够了。
关于c - 将地址写入指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790036/