c - 使用指针写入内存

标签 c memory cortex-a8

<分区>

我正在尝试使用如下指针写入内存,但它正在写入意外地址。

 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 4 * sizeof(*pointer) >指针。 IE。你在 __MEMORY_BASE 之外写了 16 个字节。

要正确使用第二个变体,或者对第一个变体使用 pointer[1](或 *(pointer + 1))。

关于c - 使用指针写入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45348500/

相关文章:

ARM Cortex-A8 : Whats the difference between VFP and NEON

c - 在 omap4460 上设置 gptimer1

arm - NEON :float32x4_t 向量中最多四个浮点值

c - 初始化 C 结构以便全局使用

c - 在 C 中直接从其他编译单元访问一个编译单元的静态变量

c - 该函数如何打印给定参数的正确十六进制

c++ - Valgrind 说 malloc 内存损坏,还没有使用 malloc

c - pkg-config 目标在哪里定义?

c - 如何使用冷缓存启动程序

iphone - 下载图像时出现内存警告和应用程序崩溃