此代码出现在CrossExample的superpowered.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
,必须在将其分配给任何内容之前进行声明。