C++ Tipos de variables

Una variable no es más que el nombre de un área de almacenamiento que el programa puede manipular.

En C++, hay varios tipos de variables que se pueden usar para almacenar diferentes clases de datos.

En C++, cada variable tiene un tipo especificado. El tipo determina el tamaño y la disposición del almacenamiento de la variable, los valores dentro de ese rango se pueden almacenar en memoria, y los operadores se pueden aplicar a la variable.

El nombre de una variable puede estar compuesto por letras, dígitos y el carácter de subrayado. Debe comenzar con una letra o un guion bajo.

Las letras mayúsculas y minúsculas son distintas, porque C++ distingue entre mayúsculas y minúsculas.

Basándose en los tipos básicos explicados en el capítulo anterior, existen los siguientes tipos básicos de variables, que se explicarán en el próximo capítulo:

TipoDescripción
boolTipo booleano, almacena los valores true o false, ocupa 1 byte.
charTipo de carácter, se utiliza para almacenar caracteres ASCII, normalmente ocupa 1 byte.
intTipo entero, se utiliza normalmente para almacenar enteros ordinarios, normalmente ocupa 4 bytes.
float

Valor flotante de precisión simple, se utiliza para almacenar números de punto flotante de precisión simple. La precisión simple tiene el formato: 1 bit de signo, 8 bits de exponente, 23 bits de fracción, normalmente ocupa 4 bytes.

double

Valor flotante de doble precisión, se utiliza para almacenar números de punto flotante de doble precisión. La doble precisión es: 1 bit de signo, 11 bits de exponente, 52 bits de fracción, normalmente ocupa 8 bytes.

voidRepresenta la ausencia de tipo.
wchar_tTipo de carácter ancho, se utiliza para almacenar un rango más amplio de caracteres, normalmente ocupa 2 o 4 bytes.

C++ también permite definir varios otros tipos de variables, comoenumeraciones, punteros, arreglos, referencias, estructuras de datos, clasesetc., lo cual se explicará en capítulos posteriores.

  1. Tipos enteros (Integer Types):

    • int: se utiliza para representar enteros, normalmente ocupa 4 bytes.
    • short: se utiliza para representar enteros cortos, normalmente ocupa 2 bytes.
    • long: se utiliza para representar enteros largos, normalmente ocupa 4 bytes.
    • long long: se utiliza para representar enteros más largos, normalmente ocupa 8 bytes.
  2. Tipos de punto flotante (Floating-Point Types):

    • float: se utiliza para representar números de punto flotante de precisión simple, normalmente ocupa 4 bytes.
    • double: se utiliza para representar números de punto flotante de doble precisión, normalmente ocupa 8 bytes.
    • long double: se utiliza para representar números de punto flotante de mayor precisión; el número de bytes ocupados puede variar según la implementación.
  3. Tipos de carácter (Character Types):

    • char: se utiliza para representar caracteres, normalmente ocupa 1 byte.
    • wchar_t: se utiliza para representar caracteres anchos, normalmente ocupa 2 o 4 bytes.
    • char16_t: se utiliza para representar caracteres Unicode de 16 bits, ocupa 2 bytes.
    • char32_t: se utiliza para representar caracteres Unicode de 32 bits, ocupa 4 bytes.
  4. Tipo booleano (Boolean Type):

    • bool: se utiliza para representar valores booleanos, solo puede tomartrueofalse。
  5. Tipos de enumeración (Enumeration Types):

    • enum: se utiliza para definir un conjunto de constantes enteras con nombre.
  6. Tipos de puntero (Pointer Types):

    • type*: se utiliza para representar un puntero a un objeto de tipotypedel objeto.
  7. Tipos de arreglo (Array Types):

    • type[]otype[size]: se utiliza para representar un arreglo compuesto por elementos del mismo tipo.
  8. Tipos de estructura (Structure Types):

    • struct: se utiliza para definir una estructura que contiene varios miembros de diferentes tipos.
  9. Tipos de clase (Class Types):

    • class: se utiliza para definir un tipo personalizado con atributos y métodos.
  10. Tipos de unión (Union Types):

    • union: se utiliza para definir un tipo de dato especial que puede almacenar diferentes tipos de datos en la misma posición de memoria.

En C++, la longitud de un tipo (es decir, el número de bytes que ocupa) depende del compilador y de la arquitectura del ordenador. Sin embargo, el estándar de C++ especifica los rangos mínimos de los diferentes tipos enteros, no el número concreto de bytes, con el fin de garantizar que el código se ejecute correctamente en diferentes sistemas.

Ten en cuenta que los rangos de los tipos anteriores son solo los requisitos mínimos establecidos por el estándar de C++. En realidad, en muchos sistemas estos tipos pueden ocupar más bytes. Por ejemplo, en muchos ordenadores modernos int suele ocupar 4 bytes, mientras que long puede ocupar 8 bytes.

A continuación explicaremos cómo definir, declarar y utilizar varios tipos de variables.

Definición de variables en C++

La definición de una variable le indica al compilador dónde y cómo crear el almacenamiento de la variable.

La definición de una variable especifica un tipo de dato e incluye una lista de una o más variables de ese tipo, como se muestra a continuación:

type variable_list;

Aquí,typedebe ser un tipo de dato válido de C++, puede ser char, wchar_t, int, float, double, bool o cualquier objeto definido por el usuario,variable_listpuede estar compuesto por uno o más nombres de identificadores, separados por comas. A continuación se muestran varias declaraciones válidas:

int i, j, k; char c, ch; float f, salary; double d;

Líneaint i, j, k;declara y define las variables i, j y k, lo que indica al compilador que cree variables de tipo int llamadas i, j y k.

Las variables se pueden inicializar (asignar un valor inicial) en el momento de la declaración. El inicializador consta de un signo igual seguido de una expresión constante, como se muestra a continuación:

type variable_name = value;

A continuación se muestran algunos ejemplos:

extern int d = 3, f = 5; // declaración de d y f int d = 3, f = 5; // definir e inicializar d y f byte z = 22; // definir e inicializar z char x = 'x'; // el valor de la variable x es 'x'

Definición sin inicialización: las variables con duración de almacenamiento estático se inicializan implícitamente a NULL (todos los bytes tienen valor 0); los valores iniciales de todas las demás variables no están definidos.

Declaración de variables en C++

La declaración de una variable garantiza al compilador que la variable existe con el tipo y nombre dados, de modo que el compilador pueda continuar la compilación sin necesidad de conocer los detalles completos de la variable. La declaración de variable solo tiene significado en tiempo de compilación; en el enlace del programa, el compilador necesita la definición real de la variable.

Cuando se usan varios archivos y la variable solo se define en uno de ellos (el archivo que define la variable está disponible en el enlace del programa), la declaración de la variable resulta muy útil. Se puede usar laexternpalabra clave para declarar una variable en cualquier lugar. Aunque se puede declarar una variable varias veces en un programa de C++, la variable solo se puede definir una vez en un archivo, función o bloque de código.

Ejemplo

Prueba el siguiente ejemplo, en el que las variables ya se declaran en la parte superior, pero se definen e inicializan dentro de la función principal:

Ejemplo

#include <iostream> using namespace std; // declaración de variable extern int a, b; extern int c; extern float f; int main () { // definición de variable int a, b; int c; float f; // inicialización real a = 10; b = 20; c = a + b; cout << c << endl ; f = 70.0/3.0; cout << f << endl ; return 0; }

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

30
23.3333

De manera similar, al declarar una función, se proporciona un nombre de función, mientras que la definición real de la función se puede realizar en cualquier lugar. Por ejemplo:

// declaración de la función int func(); int main() { // llamada a la función int i = func(); } // definición de la función int func() { return 0; }

Lvalues (valores izquierdos) y Rvalues (valores derechos) en C++

En C++ hay dos tipos de expresiones:

  • Lvalue (valor izquierdo):Una expresión que apunta a una ubicación de memoria se denomina expresión lvalue. Un lvalue puede aparecer a la izquierda o a la derecha del signo de asignación.
  • Rvalue (valor derecho):El término rvalue se refiere a un valor numérico almacenado en alguna dirección de memoria. Un rvalue es una expresión a la que no se le puede asignar un valor; es decir, un rvalue puede aparecer a la derecha del signo de asignación, pero no a la izquierda.

Las variables son lvalues, por lo que pueden aparecer a la izquierda del signo de asignación. Los literales numéricos son rvalues, por lo que no se les puede asignar un valor y no pueden aparecer a la izquierda del signo de asignación. La siguiente es una declaración válida:

int g = 20;

Pero la siguiente no es una declaración válida y generará un error en tiempo de compilación:

10 = 20;
Otras extensiones