¿Cómo puedo obtener de manera confiable el tamaño de una matriz C-style? El método recomendado a menudo parece ser el uso de sizeof
, pero no funciona en la función foo
, donde se pasa en x
:¿Cómo obtener confiablemente el tamaño de la matriz C-style?
#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;
}
respuestas a this question recomienda sizeof
pero no dicen que (al parecer ?) no funciona si pasa la matriz. Entonces, ¿tengo que usar un centinela? (No creo que los usuarios de mi función foo
siempre se puede confiar en que poner un centinela al final. Por supuesto, podría usar std::vector
, pero entonces yo no consigo el buen sintaxis abreviada {1,2,3,4,5}
.)
http://stackoverflow.com/questions/1810083/c-pointers-pointing-to-an-array-of-fixed-size – AnT
Si los usuarios de su función no hacen lo que los documentos les dicen que hagan, eso es su problema no es tuyo Es imposible evitar que los despistados hagan un mal uso de una API. –
'x' en' foo' es un puntero, en lugar de una matriz. Consulte 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-a-array-in-the-c-programming-language. Además, dup: http://stackoverflow.com/questions/37538/c-how-do-i-determine-the-size-of-my-array – outis