C 创建新结构类型时的语法混乱
有没有人能仔细阅读上面的代码并解释一下发生了什么?我理解用函数指针填充结构,但我不理解当使用typedef创建新类型C 创建新结构类型时的语法混乱,c,pointers,struct,callback,typedef,C,Pointers,Struct,Callback,Typedef,有没有人能仔细阅读上面的代码并解释一下发生了什么?我理解用函数指针填充结构,但我不理解当使用typedef创建新类型I2C\u CALLBACKS\u t和*I2C\u CALLBACKS\u PTR时会发生什么。另外,我不理解在创建I2C_回调时使用的语法。为什么要使用等号,因为这不是我熟悉的东西 很抱歉我漫无边际地讲下去,我不确定用什么样的方式来表达我的疑问。1)typedef 您正在使用typedef创建两个新类型,I2C\u CALLBACKS\u T和I2C\u CALLBACKS\u
I2C\u CALLBACKS\u t
和*I2C\u CALLBACKS\u PTR
时会发生什么。另外,我不理解在创建I2C_回调时使用的语法。为什么要使用等号,因为这不是我熟悉的东西
很抱歉我漫无边际地讲下去,我不确定用什么样的方式来表达我的疑问。1)typedef
您正在使用typedef
创建两个新类型,I2C\u CALLBACKS\u T
和I2C\u CALLBACKS\u PTR
。这样做是为了在定义结构之前不必编写struct
关键字:
struct I2C_CALLBACK_STRUCT
{
HANDLE (*I2C_OpenDevice)(UINT32 port, UINT32 freq);
BOOLEAN (*I2C_CloseDevice)(HANDLE handle);
};
typedef struct I2C_CALLBACK_STRUCT I2C_CALLBACKS_T, *I2C_CALLBACKS_PTR;
static const I2C_CALLBACKS_T I2C_Callback =
{
OpenI2CPort,
CloseI2CPort,
};
I2C_CALLBACKS_T a; // shorter
struct I2C_CALLBACK_STRUCT a; //longer
类型I2C\u CALLBACKS\u PTR
非常有用,因为您不必显式定义指向结构的指针:
struct I2C_CALLBACK_STRUCT
{
HANDLE (*I2C_OpenDevice)(UINT32 port, UINT32 freq);
BOOLEAN (*I2C_CloseDevice)(HANDLE handle);
};
typedef struct I2C_CALLBACK_STRUCT I2C_CALLBACKS_T, *I2C_CALLBACKS_PTR;
static const I2C_CALLBACKS_T I2C_Callback =
{
OpenI2CPort,
CloseI2CPort,
};
I2C_CALLBACKS_T a; // shorter
struct I2C_CALLBACK_STRUCT a; //longer
2)结构初始化
然后,I2C\u回调
struct的函数指针被映射到OpenI2CPort
和CloseI2CPort
函数。如果删除所有“垃圾”字符,可能会更清晰,如:
I2C_CALLBACKS_PTR a, b, c; // shorter
I2C_CALLBACKS_T *a, *b, *c; // longer
equal
-符号应理解为赋值
-符号