我有一个代码,我通过了记忆中的某个地方。内存中的这个位置指向array

uint32_t *ps2 = NULL;
uint32_t src_address = 0x1ffffc3;

如何从该地址读取array的值?
我试着把它投成
*ps2 = (void *)src_address;

但它给了我一个错误:invalid conversion from ‘void*’ to ‘uint32_t
当做,

最佳答案

你有两个问题:
首先,指针ps2是一个空指针,它不指向任何地方。这意味着你不能取消引用它。
src_address不是指针,实际上应该是指针。
总而言之,你对指针的理解和使用方式似乎有些混淆。
要使其工作,首先将ps2定义为非指针:

uint32_t ps2;

然后将src_address定义为指针:
uint32_t *src_address = (uint32_t *) 0x1ffffc3;

最后像普通指针一样解引用src_address
ps2 = *src_address;

有第三个可能的问题:src_address的地址没有为uint32_t对齐。在某些系统上,未对齐的访问无效,将导致硬件异常。

10-05 19:49