gpt4 book ai didi

c - 将数据写入特定内存地址问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:12 25 4
gpt4 key购买 nike

当我使用下面的代码在内存的特定地址写入数据时,我得到一个错误告诉我

" type error in argument 1" of function write.

据我所知,S_LEN 是指向 0x1814 的指针,因此它应该以正确的方式工作,但在这种情况下,我得到了之前的错误。

当我通过 write(&S_LEN,0); 替换命令 write(S_LEN,0); 时,它工作正常。尽管在第一种情况下我将十六进制数字转换为指向整数的指针。

谁能解释一下这件事?

#define RAM_START 0x1800
#define S_LEN (((int32_t *)(RAM_START))[0xFF])
int32_t write(int32_t *dest_ptr, int32_t src)
{
*dest_ptr = src;
return 0;
}

main()
{
write(S_LEN,0);
}

最佳答案

您的write 函数期望 int32_t * 作为第一个参数,它是一个指针,因此您应该使用相反,如果您希望 S_LEN 成为指针,则可以这样:

#define S_LEN  (((int32_t *)(RAM_START))+0xFF)

您的表达式的计算结果为 int32_t,因为您在 int32_t * 上应用了下标运算符 [] (这是一个指针)。

另一方面,&S_LEN 被接受,因为它会产生您通过应用 [] 获得的 int32_t 的地址。

另请注意,S_LEN 与内存位置 4*0xFF+0x1800 相关,即 0x1BFC。 (在 0x1800 之后是 255 int32_t)。

关于c - 将数据写入特定内存地址问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33803416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com