C 创建新结构类型时的语法混乱

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

有没有人能仔细阅读上面的代码并解释一下发生了什么?我理解用函数指针填充结构,但我不理解当使用typedef创建新类型
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
-符号应理解为
赋值
-符号