2014-01-19 58 views
0

在代码: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 *频道,创建一个类型频道的指针,但它没有说它指向的地方。

难道你平时去指针= &变量

我在C新型++。感谢您的帮助。

回答

0

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

+0

所以此功能将它指向什么? – user3213163

0

当您呼叫playSound传递&channel时,您将指针传递给指针以指向一个通道。这意味着该功能可以将您的指针指向在playSound中创建的频道。困惑?好吧,一张图!

Channel* x //is a pointer to a channel 

即:

X ---> [一些内存在信道STORE]

所以正常情况下你会怎么做

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

取而代之的是,我们在做什么是

Chanel** y = &x 

ie

ý----> 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调用函数的语法需要一个指针的指针,允许它填补了指针值,让你拥有它。希望这使得它更清晰一点......

+0

因此,您创建的指针指向指向通道地址的指针。如果是这样,为什么将指针的地址作为参数传递而不是指针本身?感谢您的帮助。 – user3213163

+0

别担心,我现在明白了 – user3213163

1

二号线你传递一个指针的指针通过使用指针的地址初始化FMOD系统