指针和地址求解释

2019-03-23 18:20发布

void GPIO_DeInit(GPIO_TypeDef* GPIOx)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  
  switch (*(uint32_t*)&GPIOx)
  {
    case GPIOA_BASE:
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, ENABLE);
      RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
      break;.....
不明白switch行中GPIOx为什么要取址,GPIOx本来不就是地址么?
#define GPIOA    ((GPIO_TypeDef*)GPIOA_BASE)
求解释
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
huaiqiao
1楼-- · 2019-03-24 10:40
1、首先根据楼主您的描述GPIOx变量是个GPIO_TypeDef*型的;

2、switch()括号里面的类型跟 case后面的GPIOA_BASE的类型是一样的;

3、这里(*(uint32_t*)&GPIOx),是跟4楼说的一样,是做了强制类型转换。
ddong0
2楼-- · 2019-03-24 15:55
 精彩回答 2  元偷偷看……
ddong0
3楼-- · 2019-03-24 19:02
感谢各位。
辛昕
4楼-- · 2019-03-24 20:20
lcofjp 发表于 2016-2-2 10:49
楼主不要随便拿来一段代码就学习或者参考,要学习好的代码才有意义,其实那一堆迷惑人的符号,完全没啥意义 ...

差评!

*(int *)0x0001 = 34;
(int).....

我是写不下去了,你写给我看
辛昕
5楼-- · 2019-03-24 20:30
 精彩回答 2  元偷偷看……
辛昕
6楼-- · 2019-03-24 22:06
huaiqiao 发表于 2016-2-2 13:37
1、首先根据楼主您的描述GPIOx变量是个GPIO_TypeDef*型的;

2、switch()括号里面的类型跟 case后面的G ...

GPIOX不是变量,是一个宏定义的地址值,该地址值被强制转换成 GPIO_TypeDef *型

一周热门 更多>