c - 将地址写入指针

标签 c pointers memory dereference

我有一个指针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/

相关文章:

c - 如何定义全局字符矩阵?

c - 线程为 "suspended"对 POSIX 意味着什么?

c - fgetc() 的 C 段错误原因

php - 已用完 X 字节的允许内存大小

c - 这种线路分离有何不同?

c - 为什么即使不更改变量,const 也不起作用?

c++ - 这是 ->> 一个旧的运算符还是一个错字/错误?

c - 更新二维数组时出现段错误

c++ - C++ 指针、迭代器、图的邻接表表示的问题

c++ - 为什么内存地址是偶数?