1. 程式人生 > 其它 >c語言學習筆記-解釋#define RCC ((RCC_TypeDef *) RCC_BASE)

c語言學習筆記-解釋#define RCC ((RCC_TypeDef *) RCC_BASE)

技術標籤:stm32學習筆記指標c語言

#解釋#define RCC ((RCC_TypeDef *) RCC_BASE)

#define RCC  ((RCC_TypeDef *) RCC_BASE)

RCC_TypeDef是一個定義的結構體
RCC_BASE是一個unsigned long(32位數值)
簡化後是:(int *) 0xb8000000.
明顯,指標是一個存放地址的變數,

int a=1;
int *p=&a;

a與*p是同一個體!
在stm32你是知道RCC暫存器的地址的如0xb8000000,並且目的是用指標指向這個地
很自然會有:

int *p;
p=0xb8000000;

但是0xb8000000是一個整數,編譯器不知0xb8000000是記憶體地址,所以通過強制型別轉換將數字轉為合適的地址型別。

則,int *p;
p=(int *)0xb8000000;
這樣P就裝有一個地址,
#define RCC ((RCC_TypeDef *) RCC_BASE)
RCC 就指向是RCC_BASE這個地址
從RCC_BASE開始,長度為RCC_TypeDef這個型別的長度!
其實

int *p;
p=0xb8000000;

int *p;
p=(int *)0xb8000000;

沒有多大區別,都實現同樣的功能。
前者由於p是int 型別,所以給p賦值0xb8000000時會作預設型別轉換,有些編譯器也許會有警告。但訪問p時也會得到int型的資料。
後者加上了(int ),是做了強制型別轉換,消除了潛在的警告。程式設計思想表述得更清晰。訪問

p同樣是得到int型的資料。