2010-03-23 3 views
2

Cela semble fonctionner (compilateur ne se plaint pas, de toute façon):Objectif C - passant array littérale à une méthode

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

mais je veux le rendre plus concis et faire:

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

Comment faire? En javascript, j'appellerais des choses entre parenthèses un "tableau littéral". Je ne sais pas si les langues C ont le même concept ou la même terminologie.

+0

Si vous avez le contrôle sur cette API, je vous recommande fortement de ne pas faire circuler de tels tableaux. Les tableaux sont désordonnés et fastidieux. – Chuck

+0

@Chuck que suggérez-vous plutôt? –

Répondre

2

La deuxième manière ne fonctionne pas car le compilateur ne sait pas quel type sont les éléments du tableau. Cependant, cela ou quelque chose comme cela devrait fonctionner:

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

comme une déclaration renvoie le plus à gauche élément dans l'expression (ne peut pas le tester en ce moment même)

+0

+1, mais cela semble ... faux ...: P –

+0

en effet. Mais est la même façon que nous initialisons les compteurs dans les boucles, donc pour les fins jetables, il suffit –

+1

Totalement inutile. Voir la réponse de Cirno de Bergerac. –

11

Si votre compilateur prend en charge la syntaxe littérale composé C99, il est possible.

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

Une de mes caractéristiques préférées. Je le fais beaucoup pour 'CGPoint',' CGRect', 'UIEdgeInsets', etc:' (CGRect) {{x, y), {w, h}} ' – nielsbot

Questions connexes