Come posso ottenere in modo affidabile la dimensione di un array in stile C? Il metodo spesso consigliato sembra essere quella di utilizzare sizeof
, ma non funziona nella funzione foo
, dove x
viene passato:Come ottenere in modo affidabile la dimensione dell'array in stile C?
#include <iostream>
void foo(int x[]) {
std::cerr << (sizeof(x)/sizeof(int)); // 2
}
int main(){
int x[] = {1,2,3,4,5};
std::cerr << (sizeof(x)/sizeof(int)); // 5
foo(x);
return 0;
}
Risposte alle this question consiglia sizeof
ma non dicono che (a quanto pare ?) non funziona se si passa l'array in giro. Quindi, devo usare invece una sentinella? (Non credo che gli utenti della mia funzione foo
possono sempre essere attendibile per mettere una sentinella alla fine. Certo, avrei potuto usare std::vector
, ma poi non ho ricevuto la bella sintassi abbreviata {1,2,3,4,5}
.)
http://stackoverflow.com/questions/1810083/c-pointers-pointing-to-an-array-of-fixed-size – AnT
Se gli utenti della tua funzione non fanno ciò che i documenti dicono loro di fare, questo è il loro problema non è tuo. È impossibile impedire al clueless di usare impropriamente un'API. –
'x' in' foo' è un puntatore, piuttosto che una matrice. Vedi http://stackoverflow.com/questions/232691/how-can-i-get-the-size-of-an-array-from-a-pointer-in-c, http://stackoverflow.com/questions/1975128/sizeof-un-array-in-the-c-linguaggio di programmazione. Inoltre, dup: http://stackoverflow.com/questions/37538/c-how-do-i-determine-the-size-ofmy-array – outis