2010-03-23 38 views
2

這似乎是工作(編譯器不抱怨,反正):目標C - 傳遞數組文本的方法

float adsr[4] = {0,1.0/PULSE_SPEED, 0,1}; 
[sequence setBaseADSR:adsr]; 

,但我想讓它更簡潔,做到這一點:

[sequence setBaseADSR:{0,1.0/PULSE_SPEED, 0,1}]; 

我該怎麼做?在JavaScript中,我會調用括號中的東西「數組字面量」。不知道C語言是否有相同的概念或術語。

+0

如果你能控制這個API,我強烈建議不要傳遞這樣的原始數組。 C數組很雜亂。 – Chuck 2010-03-23 17:52:56

+0

@Chuck你會建議什麼呢? – 2012-07-12 00:15:40

回答

2

第二種方法不起作用,因爲編譯器不知道數組元素是哪種類型。然而,這還是這樣的事情應該工作:

[sequence setBaseADSR:(float adsr[4] = {0,1.0/PULSE_SPEED, 0,1})]; 

的聲明中則表達式返回最左邊的元素,如果你的編譯器支持C99複合文字的語法(現在不能,雖然測試)

+0

+1,但看起來......錯了......:P – 2010-03-23 15:53:08

+0

的確如此。但是,我們在for循環中初始化計數器的方式是相同的,所以對於不重要的目的,它就足夠了 – 2010-03-23 15:54:53

+1

完全沒有必要。見Cirno de Bergerac的答案。 – 2010-11-25 02:21:22

11

,這是可能。

[sequence setBaseADRS:(float [4]){0,1.0/PULSE_SPEED,0,1}]; 
+0

我最喜歡的功能之一。我爲'CGPoint','CGRect','UIEdgeInsets'等做了很多工作:'(CGRect){{x,y},{w,h}}' – nielsbot 2012-02-27 20:16:18