我尝试将地址存储在变量中。这个地址应该像一个数组。我从输入中获得的每个新数据都应保存在变量+ index的地址中。
int RF = 0x15; // address array
int R2 = 0 ; // index
*(RF + R2) = 100;
但是当我编译它时,我收到了这个错误:
错误:一元'*'的无效类型参数(有'int')
有没有人知道为什么?
答案 0 :(得分:7)
要直接访问内存,需要将整数转换为指针。这不是隐含的。所以你必须写一些像
这样的东西int RF = 0x15; // adresse array
int R2 = 0 ; // index
*((int*)RF + R2) = 100;
但是,这假设在该地址存在有效的int
,这在大多数系统上似乎不太可能。在某些系统上,地址也必须对齐。
因此,如果访问的内存是硬件寄存器,那么这样的代码可能会有意义,在这种情况下,指针应该更改为volatile
。默认的int
类型已经过签名,因此也没有任何意义,应该使用类似uint16_t
或uint32_t
的内容。例如:
*(volatile uint16_t*)0x15 = 100;
答案 1 :(得分:0)
其他答案可能能够解决您的错误,但即使您设法使用
编译程序int* RF = (int*)0x15;
如果您尝试访问地址0x15,仍会遇到分段错误。它不适合像您这样的用户直接访问。
了解C中的动态内存分配可能有所帮助。