FMOD对象指针

FMOD object pointers

本文关键字:指针 对象 FMOD      更新时间:2023-10-16

代码:

FMOD_RESULT result;
FMOD::System *system;
result = FMOD::System_Create(&system);
FMODErrorCheck(result);
result = system->init(100, FMOD_INIT_NORMAL, 0);
FMODErrorCheck(result);
FMOD::Sound *sound;
result = system->createSound("/home/djameson/Music/Hurts-Like-Heaven-Cold-Play.mp3", FMOD_DEFAULT, 0, &sound);
FMODErrorCheck(result);
FMOD::Channel *channel;
result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);
FMODErrorCheck(result);
result = channel->setVolume(0.5f);
FMODErrorCheck(result);

我对指针的使用感到困惑。例如,线fmod ::频道 *频道,创建一个类型频道的指针,但也没有说明它指向的位置。

您通常不去指针=& variable

我是新来的C 。谢谢您的帮助。

第二行您将指针转向指针以初始化fmod System

在下一行中,您将指针传递到该指针弹奏函数,以便它可以为您初始化。

调用playSound传递&channel时,您将指针传递到指针到通道。这意味着该功能可以将您的指针指向弹奏中创建的频道。使困惑?好的,图!

Channel* x //is a pointer to a channel

IE:

x ---> [通道存储的某些内存]

通常您会做

x = &channel // where channel is the actual (non-pointer) channel

相反,我们正在做的是

Chanel** y = &x

IE

y ----> x ---> [存储通道的某些内存]

仍然感到困惑,让我们尝试一个简单的例子。

 int a = 4; // stores 4 a
 int b = 8; // stores 8 in b
 int* x = NULL;
 int** y = NULL;
 // normal use case, point x at a
 x = &a;
 // now when we modify a, this can be accessed from x
 a = a + 1;
 // *x (i.e. the value stored where x is pointed) is now 5
 // and now for y
 y = &x;
 // we now have *y == x and **y = a
 x = &b;
 // we now have *y == x and **y = b

因此,FMOD调用的函数语法将指针指向指针,允许其填充指针值,因此您可以使用它。希望这使它变得更加清晰...