<分区>
我正在尝试使用如下指针写入内存,但它正在写入意外地址。
uint32_t* pointer = (uint32_t) (__MEMORY_BASE)
*(pointer+4) = data;
在使用下面它按预期工作时,
uint32_t* pointer = (uint32_t) (__MEMORY_BASE + 4)
*pointer = data;
谁能告诉我,为什么我不能使用第一种方法写入指针地址。
<分区>
我正在尝试使用如下指针写入内存,但它正在写入意外地址。
uint32_t* pointer = (uint32_t) (__MEMORY_BASE)
*(pointer+4) = data;
在使用下面它按预期工作时,
uint32_t* pointer = (uint32_t) (__MEMORY_BASE + 4)
*pointer = data;
谁能告诉我,为什么我不能使用第一种方法写入指针地址。
最佳答案
对于任何指针p
和索引i
,表达式*(p + i)
等于p[i]
。
这意味着当你这样做的时候
*(pointer + 4) = data;
你真的在做
pointer[4] = data;
这意味着您从 写入 byte-offset
。 IE。你在 4 * sizeof(*pointer)
>指针__MEMORY_BASE
之外写了 16 个字节。
要正确使用第二个变体,或者对第一个变体使用 pointer[1]
(或 *(pointer + 1)
)。
关于c - 使用指针写入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348500/