[C con Clase] Coherencia de tipos

srd4121 en njit.edu srd4121 en njit.edu
Vie Nov 28 09:56:10 CET 2008


Hola Narcis,

Quoting Narcis Garcia - GiLUG <informatica en actiu.net>:

> - El operador al que yo llamo función 'sizeof', ¿qué tipo de dato
> devuelve? En el código que sigue, declaro un "unsigned short int" para
> recoger su resultado, pero ¿es correcto?
> 

El operador 'sizeof' calcula el operando, o la expresión sin ser evaluada,
resultando en un número entero de tipo 'int'.

> - ¿Qué tipo de dato esperan los rangos de las matrices a la hora de
> declararlas? En el código que sigue especifico un 10U (unsigned short
> int), pero ¿es correcto? ¿es lo adecuado?
> 

Se espera un número entero de tipo 'int'. Como 'unsigned short int' es "menor"
que 'int', no hay muchos problemas, ya que el compilador puede promocionar ese
valor de menor tipo a uno de mayor.

> - En un entorno de 32-bits, los punteros son números naturales de 32
> bits (unsigned) o enteros (signed) ?
> 

Son naturales. No tiene sentido hablar de ubicaciones negativas. Puedes pensar
que un puntero o mejor dicho una dirección de memoria es análoga a un domicilio
en el mundo real. Como no tiene sentido hablar de domicilios negativos, pues
tampoco lo tiene hablar de direcciones negativas de memoria. Lo que sí podemos
manejar es un número entero (positivo, cero, o negativo) a modo de
desplazamiento a partir de una dirección de memoria que sirva de base.

> ------
> CODIGO
> ------
> 
> #include <iostream>
> using namespace std;
> 
> int NumeroElementosMatriz(long double VariableDentro[], unsigned short
> int TamanyoDatos)
> {
> 	return TamanyoDatos/sizeof(VariableDentro[0]);

Esto es correcto, pero al final ya sabemos que se trata de un valor de tipo
'long double'. Podrías escribir esto explícitamente:

return TamanyoDatos / sizeof(long double);

> }
> 

Espero haber aclarado un poco el tema.

Steven





Más información sobre la lista de distribución Cconclase