2014-01-19 170 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系統