3.4. Introducción a los tipos de datos

Los tipos de datos definen el modo en que se usa el espacio (memoria) en los programas. Especificando un tipo de datos, está indicando al compilador cómo crear un espacio de almacenamiento en particular, y también cómo manipular este espacio.

Los tipos de datos pueden ser predefinidos o abstractos. Un tipo de dato predefinido es aquel que el compilador entiende intrínsecamente, que está integrado directamente en el compilador. Estos tipos de datos son casi idénticos en C y C++. En contraste, un tipo de datos definido por el usuario es aquel que usted o cualquier otro programador crea como una clase. Éstos se denominan comúnmente tipos de datos abstractos. El compilador sabe cómo manejar los tipos predefinidos desde el principio; y «aprende» cómo manejar tipos de datos abstractos leyendo los ficheros de cabecera que contienen las declaraciones de las clases (esto se verá con más detalle en los siguientes capítulos).

3.4.1. Tipos predefinidos básicos

La especificación de C Estándar para los tipos predefinidos (que hereda C++) no indica cuántos bits debe contener cada uno de ellos. En vez de eso, estipula el mínimo y máximo valor que cada tipo es capaz de almacenar. Cuando una máquina se basa en sistema binario, este valor máximo puede ser directamente traducido a un número mínimo necesario de bits para alojar ese valor. De todos modos, si una máquina usa, por ejemplo, el decimal codificado en binario (BCD) para representar los números, entonces el espacio requerido para alojar el máximo número para cada tipo de datos será diferente. El mínimo y máximo valor que se puede almacenar en los distintos tipos de datos se define en los ficheros de cabecera del sistema limits.h y float.h (en C++ normalmente será #include <climits> y <cfloat>).

C y C++ tienen cuatro tipos predefinidos básicos, descritos aquí para máquinas basadas en sistema binario. Un char es para almacenar caracteres y utiliza un mínimo de 8 bits (un byte) de espacio, aunque puede ser más largo. Un int almacena un número entero y utiliza un mínimo de dos bytes de espacio. Los tipos float y double almacenan números en punto flotante, usualmente en formato IEEE. El float es para precisión simple y el double es para doble precisión.

Como se ha mencionado previamente, se pueden definir variables en cualquier sitio en un ámbito determinado, y puede definirlas e inicializarlas al mismo tiempo. A continuación se indica cómo definir variables utilizando los cuatro tipos básicos de datos:

//: C03:Basic.cpp
// Defining the four basic data
// types in C and C++

int main() {
  // Definition without initialization:
  char protein;
  int carbohydrates;
  float fiber;
  double fat;
  // Simultaneous definition & initialization:
  char pizza = 'A', pop = 'Z';
  int dongdings = 100, twinkles = 150, 
    heehos = 200;
  float chocolate = 3.14159;
  // Exponential notation:
  double fudge_ripple = 6e-4; 
} ///:~

Listado 3.11. C03/Basic.cpp


La primera parte del programa define variables de los cuatro tipos básicos sin inicializarlas. Si no se inicializa una variable, el Estándar dice que su contenido es indefinido (normalmente, esto significa que contienen basura). La segunda parte del programa define e inicializa variables al mismo tiempo (siempre es mejor, si es posible, dar un valor inicial en el momento de la definición). Fíjese en el uso de notación exponencial en la constante 6e-4, que significa «6 por 10 elevado a -4».