带有指针变量的地址数组

时间:2018-04-13 06:39:52

标签: c pointers gcc

我尝试将地址存储在变量中。这个地址应该像一个数组。我从输入中获得的每个新数据都应保存在变量+ index的地址中。

int RF = 0x15; // address array
int R2 = 0 ; // index
*(RF + R2) = 100;

但是当我编译它时,我收到了这个错误:

  

错误:一元'*'的无效类型参数(有'int')

有没有人知道为什么?

2 个答案:

答案 0 :(得分:7)

要直接访问内存,需要将整数转换为指针。这不是隐含的。所以你必须写一些像

这样的东西
int RF = 0x15; // adresse array
int R2 = 0 ; // index
*((int*)RF + R2) = 100;

但是,这假设在该地址存在有效的int,这在大多数系统上似乎不太可能。在某些系统上,地址也必须对齐。

因此,如果访问的内存是硬件寄存器,那么这样的代码可能会有意义,在这种情况下,指针应该更改为volatile。默认的int类型已经过签名,因此也没有任何意义,应该使用类似uint16_tuint32_t的内容。例如:

*(volatile uint16_t*)0x15 = 100;

答案 1 :(得分:0)

其他答案可能能够解决您的错误,但即使您设法使用

编译程序
int* RF = (int*)0x15; 

如果您尝试访问地址0x15,仍会遇到分段错误。它不适合像您这样的用户直接访问。

了解C中的动态内存分配可能有所帮助。