繁体   English   中英

有人可以向我解释此代码吗?

[英]Can anyone please explain me this code?

C代码演示了函数指针的使用。

#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);

Typedef函数指针。

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;
}

与typedef void(* DrawFunc)(struct geoobject)及其在程序中的用法混淆。请解释。

typedef void(*DrawFunc)(struct geoobject)意味着Drawfunc现在是指向以struct geoobject作为参数并返回void的函数的指针的typdef (或名称/别名)。

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

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

这三个函数drawcir(),drawrec()和drawtrg()都遵守typedef DrawFunc的定义,因此可以使用别名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM