FMOD对象指针

时间:2014-01-19 21:49:10

标签: c++ pointers fmod

在代码中:

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 :: Channel *通道,创建一个Channel类型的指针,但它没有说明它指向的位置。

你通常不去指针=&变量

我是c ++的新手。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

第二行传递一个指向初始化FMOD系统的指针

答案 1 :(得分:0)

在下一行中,您将指向该指针的指针传递给playSound函数,以便它可以为您初始化它。

答案 2 :(得分:0)

当您致电playSound传递&channel时,您正在将指针传递给指针到频道。这意味着该函数可以将指针指向playSound中创建的通道。困惑?好的,图表!

Channel* x //is a pointer to a channel

即:

x ---> [通道存在的一些记忆]

通常你会做

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

相反,我们正在做的是

Chanel** y = &x

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调用的函数语法采用指向指针的指针,允许它填充指针值,所以你拥有它。希望这会让它更清晰......