2016-04-22 17 views
9

In C, perché non posso fare questo:Perché non posso passare array costanti come argomenti?

arrayfn({1.0, 2.0, 3.0}); 

se arrayfn è una certa funzione che prende in un parametro di tipo double[] o double*, a seconda di quale. Provare questo mi dà un errore di sintassi.

C'è un modo per ottenere qualcosa in C come questo - generare e passare immediatamente un array noto in fase di compilazione - che evita di dover spendere una riga di codice pre-dichiarandola e riempiendola?

+5

È possibile utilizzare un valore letterale composto. –

+1

buona risposta; provato; Funziona; abbiamo finito qui –

+3

Non abbiamo finito finché non accetti una risposta. – Almo

risposta

9

Risposta breve: È necessario utilizzare uno compound literal. Qualcosa come

arrayfn((double[]) {1.0, 2.0, 3.0}); 

dovrebbe fare il lavoro.


Qualche spiegazione

Venendo alla parte, perché arrayfn({1.0, 2.0, 3.0}); non ha funzionato, perché, senza la sintassi per letterali composti, {1.0, 2.0, 3.0} è una lista di inizializzazione doppietta allegata. Non denota un "oggetto" che può essere usato come argomento di funzione. Sono non"array costanti", come forse hai pensato.

Per aggiungere un po 'di informazioni, citando C11, capitolo §6.5.2.5, letterali composti

un'espressione postfissa che consiste di un nome di tipo tra parentesi seguito da un tutore racchiuso elenco di inizializzatori è un composto letterale. Fornisce un oggetto senza nome il cui valore è dato dall'elenco di inizializzazione.

+0

Grazie! Funziona. Un po 'strano che il mio impulso immediato fosse eseguire '(double *) {1.0, 2.0, 3.0}', che non faceva quello che volevo che facesse - ma abbastanza vicino! –

+2

'const double []' – user3528438

Problemi correlati