GPIO_Init(GPIOB, &GPIO_InitStructure)这是STM32的库函数,但是为什么要用“&”呢,有什么说法吗

基本上都是这么用的,为什么啊,或者是C语言的标准语法... 基本上都是这么用的,为什么啊,或者是C语言的标准语法 展开
 我来答
好嘞啊啊啊啊
2014-08-26 · TA获得超过2612个赞
知道大有可为答主
回答量:1860
采纳率:66%
帮助的人:1193万
展开全部

取地址符 


void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
  uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
  uint32_t tmpreg = 0x00, pinmask = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
  assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));

它的形参是一个 结构体指针 GPIO_InitTypeDef*
  所以必须要对这个形参也就是 这个结构体取地址

GPIO_InitStruct->GPIO_Mode    中 -> 就说明是对结构体操作


至于要不要这个取地址符 就要看你的实参 和形参 了 

形参是 地址   实参 是变量  那么就要对实参取地址 

形参是 地址   实参 是地址  或者

形参是 变量   实参 是变量 

那么就没有必要 取地址

謇燎0S
2020-03-16
知道答主
回答量:1
采纳率:0%
帮助的人:636
展开全部
因为void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)中,本身两个参数(形参)都是指针类型,而第一个实参GBIOB本身在宏定义:#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)中定义的即为指针类型,所以直接写GPIOB。而第二个实参 GPIO_InitStructure定义为:GPIO_InitTypeDef GPIO_InitStructure; 只是个结构体变量,所以需要对其进行取地址&GPIO_InitStructure。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友349a0f2
2019-10-29
知道答主
回答量:4
采纳率:0%
帮助的人:3079
展开全部
&表示传递的是 GPIO_InitStructure 的地址,用的时候找到地址取用就好了。
其实不用地址直接把数据送过来也是可以的。但stm32固件库都是传递的地址,这是因为结构体这种数据类型占用空间较大,相较直接传递一个地址来说,耗费资源大。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式