在代码中:
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 ++的新手。谢谢你的帮助。
答案 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调用的函数语法采用指向指针的指针,允许它填充指针值,所以你拥有它。希望这会让它更清晰......