理解C中特殊结构的问题[重复]

1u4esq0p  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(170)

此问题已在此处有答案

How do function pointers in C work?(12个回答)
2天前关闭。
我在理解下面的C语言结构时遇到了问题!我知道什么是结构体和它的用途,但这一个对我来说似乎很奇怪,我不能看到结构体的标准形式,就像它在c学习网站上描述的那样,如www.geeksforgeeks.org
这个结构体的代码中没有更多的内容!

typedef struct sIMasterConnection* IMasterConnection;

struct sIMasterConnection {
    bool (*isReady) (IMasterConnection self);
    bool (*sendASDU) (IMasterConnection self, CS101_ASDU asdu);
    bool (*sendACT_CON) (IMasterConnection self, CS101_ASDU asdu, bool negative);
    bool (*sendACT_TERM) (IMasterConnection self, CS101_ASDU asdu);
    void (*close) (IMasterConnection self);
    int (*getPeerAddress) (IMasterConnection self, char* addrBuf, int addrBufSize);
    CS101_AppLayerParameters (*getApplicationLayerParameters) (IMasterConnection self);
    void* object;
};
plicqrtu

plicqrtu1#

结构的所有数据成员(此成员除外)

void* object;

是指向函数的指针。
例如,此数据成员

bool (*isReady) (IMasterConnection self);

声明一个指向函数的指针,该函数具有返回类型bool和一个类型为IMasterConnection的参数,该参数是如下声明的指针类型的别名

typedef struct sIMasterConnection* IMasterConnection;

也就是说,参数self具有指向struct sIMasterConnection类型的对象的指针类型。
为了使它更清楚,考虑一个简单的演示程序,其中声明了一个指向函数的指针。

#include <stdio.h>

void f( void )
{
    puts( "Hello, World!" );
}

int main( void )
{
    void ( *pf )( void ) = f;

    pf();
}

程序输出为

Hello, World!

与声明saclar变量pf的方式类似,您可以声明结构的数据成员。

#include <stdio.h>

void f( void )
{
    puts( "Hello, World!" );
}

int main( void )
{
    struct A
    {
        void ( *pf )( void );
    };

    struct A a = { .pf = f };

    a.pf();
}

相关问题