谁能帮我解释一下这段代码吗?

标签 c struct function-pointers

C code to demonstrate the use of function pointers.

#include<stdio.h>
struct geoobject
{
        enum{CIR=0,REC,TRG}gcode;
        union
        {
                struct cir{double x,y,r;}c;
                struct rec{double x,y,w,h;}r;
                struct trg{double x,y,b,h;}t;
        };
};
typedef void(*DrawFunc)(struct geoobject);

Typedefed function pointer.

void drawcir(struct geoobject go)
{
        printf("Circle:(%lf,%lf,%lf)\n",go.c.x,go.c.y,go.c.r);
}
void drawrec(struct geoobject go)
{
        printf("Rec:(%lf,%lf,%lf,%lf)\n",go.r.x,go.r.y,go.r.w,go.r.h);
}
void drawtrg(struct geoobject go)
{
        printf("Triangle:(%lf,%lf,%lf,%lf)\n",go.t.x,go.t.y,go.t.b,go.t.h);
}
DrawFunc DrawArr[]={drawcir,drawrec,drawtrg};
int main(void)
{
        struct geoobject go;
        go.gcode=CIR;
        go.c.x=2.3;go.c.y=3.6;go.c.r=1.2;
        DrawArr[go.gcode](go);
        go.gcode=REC;
        go.r.x=4.5;go.r.y=1.9;go.r.w=4.2;go.r.h=3.8;
        DrawArr[go.gcode](go);
        go.gcode=TRG;
        go.t.x=3.1;go.t.y=2.8;go.t.b=4.4;go.t.h=2.7;
        DrawArr[go.gcode](go);
        return 0;
}

Confused with typedef void(*DrawFunc)(struct geoobject) and its usage in the program.Please explain.

最佳答案

typedef void(*DrawFunc)(struct geoobject) 表示 Drawfunc 现在是指向函数的指针的 typdef(或名称/别名),该函数采用struct geoobject 作为参数,并返回 void。

在程序中,声明了一个函数指针数组:

DrawFunc DrawArr[]={drawcir,drawrec,drawtrg};

所有三个函数drawcir()、drawrec() 和drawtrg() 均遵循typedef DrawFunc 的定义,并且可以使用别名。

关于谁能帮我解释一下这段代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41880412/

相关文章:

c - 这个 C 结构如何输出值?

c - 将在派生结构上运行的函数指针转换为在基类型上运行的函数,是 C 语言中未定义的行为吗?

c - 函数 ptrs 数组上的 realloc() 导致 SIGABRT

c - 让函数互相调用 - C

c - c 中的 char 指针数组

c - 在 C 中使用二进制搜索算法的简单猜数游戏

c - 关于函数指针声明

c - 在 C 中传递二维字符数组

c - 结构体 C 中变量矩阵的初始化

c++ - 延迟函数调用中的延迟函数调用