我试图理解一个特定的函数指针和赋值
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";
这里,a
和b
都是指向char
的指针,所以可以把char
看成是整行的"base type"变量定义。当然,您可以将其重写为:
char (*a) = (char *)"123";
char (*b) = "xyz";
所以你原来代码中逗号后面的部分可以重写为(其中void
是"base type"):
void (*USL_DrawString)(char *) = VWB_DrawPropString;
如您所见,它只是定义了另一个具有不同参数列表且没有类型转换的函数指针。
我正在阅读电子游戏“黑社会的崛起:黑暗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";
这里,a
和b
都是指向char
的指针,所以可以把char
看成是整行的"base type"变量定义。当然,您可以将其重写为:
char (*a) = (char *)"123";
char (*b) = "xyz";
所以你原来代码中逗号后面的部分可以重写为(其中void
是"base type"):
void (*USL_DrawString)(char *) = VWB_DrawPropString;
如您所见,它只是定义了另一个具有不同参数列表且没有类型转换的函数指针。