c语言学习笔记-解释#define RCC ((RCC_TypeDef *) RCC_BASE)

#解释#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型的数据。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值