GPIO_Init(GPIOB, &GPIO_InitStructure)这是STM32的库函数,但是为什么要用“&”呢,有什么说法吗
3个回答
展开全部
取地址符
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 中 -> 就说明是对结构体操作
至于要不要这个取地址符 就要看你的实参 和形参 了
形参是 地址 实参 是变量 那么就要对实参取地址
形参是 地址 实参 是地址 或者
形参是 变量 实参 是变量
那么就没有必要 取地址
展开全部
因为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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&表示传递的是 GPIO_InitStructure 的地址,用的时候找到地址取用就好了。
其实不用地址直接把数据送过来也是可以的。但stm32固件库都是传递的地址,这是因为结构体这种数据类型占用空间较大,相较直接传递一个地址来说,耗费资源大。
其实不用地址直接把数据送过来也是可以的。但stm32固件库都是传递的地址,这是因为结构体这种数据类型占用空间较大,相较直接传递一个地址来说,耗费资源大。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询