Resulta, sucede y acontece que
sizeof es un operador en tiempo de complilación, o sea,
que sizeof y su operando (en este caso, el vector) son remplazados por el valor resultante...
Lo curioso es que era bastante obvio. Ja, eso dice uno cuando ya conoce la respuesta.
Por eso es que cuando pasamos la matriz le tenemos que decir explícitamente de qué
tamaño la vamos a recibir. Si no, ¿cómo demonios haría el compilador?
Y estuvimos a punto de demostrarlo en clase. Sólo nos hizo falta una prueba. Y ya la
agregué en el código.
Cuando creamos vectores dinámicos el operador sizeof
simple y sencillamente no funka porque en tiempo de compilación no se sabe
de que tamaño va a hacer. Es decir, hasta que el usuario mande el valor.
¿Es entonces el arreglo un puntero?Para C/C++ no lo es. Es decir, dentro de la información que tiene que almacenar
C/C++ del tipo de dato tiene un campo (en tiempo de compilación) donde, si puede,
almacena el tamaño.
Entonces, ¿qué es para C/C++?Un simple tipo de dato, igual que int, float o double.
Pero, ¿por qué se comporta como un puntero?Porque cuando el
código está compilado es un simple y llano
puntero.
C/C++ de lo dicho, y recordarios:- No existe un sizeof en código ensamblador. Por algo son arquitecturas de 32bits y/o 64bits.
Los procesadores son capaces de procesar sólo datos e instrucciones de 32bits.
- Realmente no existen int, long o double como tales, existen bytes!. Los int, long, etc son
de C/C++. sizeof también lo es.
- Si programaramos en ensamblador, tendríamos que almacenar el tamaño del arreglo siempre.
- C/C++ nos evita un poco la tarea con el operador sizeof
¿Quién es el papa de C/C++?Bjarne Stroustrup
(http://en.wikipedia.org/wiki/Bjarne_Stroustrup) y se pronuncia "B-yar-ne Strov-stroop"
La fe es resultado de la pereza de preguntarse por qué.
Referencias
http://en.wikipedia.org/wiki/Sizeofhttp://en.wikipedia.org/wiki/Typeof
http://en.wikipedia.org/wiki/Run-time_type_information