繁体   English   中英

我正在尝试了解特定的函数指针和赋值

[英]I am trying to understand a specific function pointer and assignment

我正在阅读视频游戏“黑社会的崛起:黑暗战争”的源代码,但遇到了一些我不理解的代码

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 *作为参数,并且不返回任何值,因为void

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

到底是什么意思?

最好的祝福。

让我们将这条长线分成三部分:

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

我相信现在更容易理解。 如您USL_MeasureStringUSL_MeasureString被定义为函数指针,而赋值的RHS(右侧)是应用于单词VW_MeasurePropString的类型VW_MeasurePropString

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

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

这里, ab都是char指针,因此您可以将char视为整行变量定义的“基本类型”。 当然,您可以将其重写为:

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

因此,原始代码中逗号后的部分可以重写为(其中void是“基本类型”):

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

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

暂无
暂无

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

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