与struct有关的问题

与struct有关的问题,c,C,我正在尝试调用带有签名的库函数 void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStruct) 其中,GPIO_InitTypeDef是一个typedef结构 我尝试了以下几点: GPIO_InitTypeDef NE1 = { 7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP }; GPIO_Init(NE1); 但我得到了一个编译器错误 错误:“GPIO_Init”的参

我正在尝试调用带有签名的库函数

void GPIO_Init(GPIO_InitTypeDef* GPIO_InitStruct)
其中,
GPIO_InitTypeDef
是一个
typedef
结构

我尝试了以下几点:

GPIO_InitTypeDef NE1 = {
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP
};
GPIO_Init(NE1);
但我得到了一个编译器错误

错误:“GPIO_Init”的参数1的类型不兼容 “struct GPIO_InitTypeDef*”但参数的类型为“GPIO_InitTypeDef”

我还尝试使用
struct
关键字:

struct GPIO_InitTypeDef NE1 = {
    7, GPIO_Mode_AF, GPIO_Speed_25MHz, GPIO_OType_PP, GPIO_PuPd_UP
};
GPIO_Init(NE1);
但是我得到了编译器错误

错误:“NE1”的存储大小未知

我做错了什么,调用
GPIO\u Init
的正确方法是什么?

您需要使用:

GPIO_Init (&NE1); // <- Note the '&' indicating pointer-to
但是你的
NE1
变量是一个实际的结构,所以你必须使用
&
来获取指向它的指针,这样你才能传递它


因为您试图传递的是结构而不是指向结构的指针,这就是导致您的
不兼容类型
错误的原因。

谢谢。我想这整个困惑是因为我没有正确理解我在做什么。你能解释一下吗?@Randomblue,当然,我添加了一些额外的信息,希望能让它更清楚。
void GPIO_Init (GPIO_InitTypeDef * GPIO_InitStruct)
//                               ^
//                            pointer