我试图理解一个特定的函数指针和赋值

I am trying to understand a specific function pointer and assignment

我正在阅读电子游戏“黑社会的崛起:黑暗War”的源代码,我遇到了a line of code我不明白。

void (*USL_MeasureString)(char *, int *, int *, font_t *) = (void (*)(char *, int *, int *, font_t *))VW_MeasurePropString, (*USL_DrawString)(char *) = VWB_DrawPropString;

据我了解,void (*USL_MeasureString)(char *, int *, int *, font_t *)的意思是*USL_MeasureString是一个函数指针,它以char *, int *, int *, font_t *为参数,而returns因为void什么都没有。

但是,我对其余代码感到困惑。

具体是什么意思?

此致。

让我们把这一长行分成三部分:

void
  (*USL_MeasureString)(char *, int *, int *, font_t *) = (void (*)(char *, int *, int *, font_t *))VW_MeasurePropString,
  (*USL_DrawString)(char *) = VWB_DrawPropString;

我相信现在更容易理解了。正如您已经正确理解的那样,USL_MeasureString 被定义为函数指针,赋值的 RHS(Right-Hand 侧)是应用于单词 VW_MeasurePropString 的类型转换。

第二部分本身看起来很棘手,但是一旦您了解了以下行的工作原理,您就会知道它是一样的:

char (*a) = (char *)"123", (*b) = "xyz";

这里,ab都是指向char的指针,所以可以把char看成是整行的"base type"变量定义。当然,您可以将其重写为:

char (*a) = (char *)"123";
char (*b) = "xyz";

所以你原来代码中逗号后面的部分可以重写为(其中void是"base type"):

void (*USL_DrawString)(char *) = VWB_DrawPropString;

如您所见,它只是定义了另一个具有不同参数列表且没有类型转换的函数指针。