SuperpoweredAdvancedAudioPlayer

SuperpoweredAdvancedAudioPlayer

此代码出现在CrossExamplesuperpowered.com中:

static void playerEventCallbackA(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void * __unused value) {
    if (event == SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess) {

        SuperpoweredAdvancedAudioPlayer *playerA = *((SuperpoweredAdvancedAudioPlayer **)clientData);

        playerA->setBpm(126.0f);
        playerA->setFirstBeatMs(353);
        playerA->setPosition(playerA->firstBeatMs, false, false);
    };
}

    playerA = new SuperpoweredAdvancedAudioPlayer(&playerA , playerEventCallbackA, samplerate, 0);

    playerA->open(path, fileAoffset, fileAlength);

谁能帮助我了解if语句的第一行?特别是,我该如何解释作业的右侧?
*((SuperpoweredAdvancedAudioPlayer **)clientData)

最佳答案

clientData作为void pointer传递。稍后,将其转换为pointer to pointer类型的SuperpoweredAdvancedAudioPlayer。我猜想clientData在传递给函数之前就是这种类型的,这就是为什么需要强制类型转换。我不知道为什么使用此void*而不是SuperpoweredAdvancedAudioPlayer**。不好,但也不罕见。

名为playerA的var是指向SuperpoweredAdvancedAudioPlayer类型的对象的指针。取消指向指针的指针,您将获得一个指向SuperpoweredAdvancedAudioPlayer对象的指针,该对象与playerA的类型相同。
请注意,playerA仅在if块内部声明,其生命在那里结束。块外还有另一个playerA,必须在将其分配给任何内容之前进行声明。

10-08 08:18