Estoy leyendo "Programación C de King KN" y encontré la siguiente declaración:
Discutimos el uso de la expresión
sizeof(a)/sizeof(a[0])
para calcular el número de elementos en una matriz. La expresiónsizeof(a)/sizeof(t)
, donde t es el tipo de elementos de a, también funcionaría, pero se considera una técnica inferior.
¿Por qué se considera una técnica inferior?
Respuestas:
sizeof(a)/sizeof(t)
codifica explícitamente el tipo en la expresión. Ahora tiene el tipo especificado en varias ubicaciones, sin compatibilidad con el compilador para asegurarse de que está utilizando el mismo tipo. Entonces, si cambia el tipo base de la matriz, pero no en la expresión de recuento (completamente separada), bingo: su código se compilará bien, pero su recuento de elementos será incorrecto. Si tiene suerte, su programa se bloqueará, pero si no, funcionará casi completamente correctamente, pero de vez en cuando se comportará de manera totalmente extraña.sizeof(a)/sizeof(a[0])
se garantiza que es correcto, solo requiere el nombre de la matriz. Cambia el tipo y estás bien; cambie el nombre de la matriz y el compilador se quejará. No se requiere pensar: nos gusta ese tipo de programación.fuente
sizeof a/sizeof*a
, aunque en realidad no es una diferencia sustancial.