Si consiglia di rispetto a utilizzando la sintassi []
per i parametri di funzione.
L'unico argomento a favore dell'utilizzo di []
è che implica, in modo auto-documentante, che il puntatore punta a più di una cosa. Per esempio:
void swap(int *x, int *y)
double average(int vals[], int n)
Ma allora perché è char *
sempre utilizzato per le stringhe piuttosto che char []
? Preferirei essere coerente e usare sempre *
.
Alcune persone amano const
tutto ciò che possono, inclusi i parametri del pass-by-value. La sintassi per che quando si utilizza []
(disponibile solo in C99) è meno intuitivo e probabilmente meno noto:
const char *const *const words
vs. const char *const words[const]
Anche se io ritengo che finale const
essere eccessivo, in ogni caso.
Inoltre, il modo in cui gli array decadono non è completamente intuitivo. In particolare, è not applied recursively (char words[][]
non funziona). Soprattutto quando inizi a lanciare più indirette, la sintassi []
causa solo confusione. IMO è meglio utilizzare sempre la sintassi del puntatore piuttosto che fingere che un array venga passato come argomento.
Altre informazioni: http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr#aryptrparam.
Se l'obiettivo è la coerenza, è necessario utilizzare l'asterisco, poiché ciò è coerente con le normali dichiarazioni (non parametriche). L'altra sintassi dovrebbe morire, non causa altro che confusione. –