"星号类型星号"的含义在C:*(volatile int *)foo中

时间:2016-05-09 13:56:15

标签: c pointers casting

我试过环顾四周但却无法找到答案。当我们使用双星号时,我发现了一些解释,**,但是,我不确定这是否适用于我的情况。

我遇到的嵌入式系统代码对我来说有些陌生:

port0 = *(volatile int *)(0x1C002100)

此操作的作用是读取地址为0x1C002100的GPIO端口。然而,所有这些星号的交易是什么?

我会写这样的东西:

port0 = *0x1C002100

他们正在做某种类型的指针类型转换,因此我们使用2个星号吗?那是我最好的猜测。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

看一下表达式,它首先将一个整数常量转换为一个指针,然后它将deferred指向该指针,这将产生一个整数。它基本上与:

相同
int *p = (volatile int *)(0x1C002100);
int n = *p;
port0 = n;

第一个*表示指针类型,第二个是解除引用运算符。

但是第二行是无效的C代码,因为你不能取消引用整数。

port0 = *0x1C002100;