Curso C++
Publicado el 26/01/2026
2. Variables
Una variable es un espacio de memoria. Pero seamos honestos, si es la primera vez que estaś intentando entender qué es una variable entonces esa definición no significa nada. Así que vamos a explicarlo de otra manera. Una variable es como una etiqueta, como esas que se les coloca a los frasco de condimentos en la cocina. Imagnemoslo. Tomo una etiqueta, saco un marcador del cajón y anoto:
azucar
Ahora bien, esa etiqueta la tenemos que pegar en un contenedor o un frasco o un recipiente. En donde luego pondremos el azucar. Entonces, tomamos un frasco de vidrio de una medida media, digamos 1 kilo, y colocamos la etiqueta ahí.
frasco azucar
Ya casi lo tenemos. Falta el último paso. Poner el azucar en el frasco. Tomamos la bolsa que compramos por la mañana en el supermercado, la abrimos y lo ponemos todo dentro del frasco, que como ya tiene la etiqueta de azucar pegada no nos vamos a confundor de frasco:
frasco azucar = 1 kilo de azucar
Listo. Ahora podemos guardar el frasco junto al resto de frascos y estar seguros de que cada vez que queramos azucar, vamos a encontrarlo por la etiqueta.
En código
Esto que abamos de imaginar es un mero ejemplo, pero útil para viasualizar qué es una variable. Vamos a hacer unos cambios en el ejemplo para que ahora sí podamos entenderlo en código. Lo primero:
La etiqueta en la que escribimos
azucares el identificador de la variable. Es el nombre que ponemos para crearlo y posteriormente poder hacer uso de esta.
Identificador
Lo único que debemos entender sobre el identificador es que tiene unas pocas reglas que debemos respetar:
- Los identificadores no pueden empezar con números. Por ejemplo:
1azucar. - Tampoco pueden empezar con súmbolos. Por ejemplo:
/azucaro"azucar"(Teniendo en cuenta que las comillas dobles están reservadas para los datos de tipo texto). - No pueden contener espacios. Por ejemplo:
frasco de azucar. - Por lo que solamente deben iniciar con una letra (minúscula o mayúsculas) o con el símbolo
_, que lo vamos a evitar por el momento porque se lo tiende a utilizar más enProgramación Orientada a Objetos. - Pueden contener números entre las letras. Por ejemplo:
azucar1oazu1car. - Pueden estar todas las letras en mayúscular. Por ejemplo:
AZUCAR.
Y un poco más, pero que no son importantes por el momento.
Entonces, la etiqueta azucar está perfecta como identificador.
Tipos de Datos
Siguiendo con el ejemplo, el contenedor o recipiente, como el frasco que utilizamos, podría tener otros tamaños, como uno más grande o más pequeños o para otro tipos de elemento, como agu o aceite. En nuestro caso elegimos un frasco, lo que en ćodigo se traduce como tipo de dato.
Un tipo de dato indica qué clase de contenido vamos a guardar. ¿Un número entero?, ¿Una letra?, ¿Un texto?, ¿Un número con decimales?
- para números enteros ->
int - Para números con decimales ->
float - Para letras ->
char - Para frases de texto extendos ->
stringochar[] - Para valores de verdad (1 o 0 - true o false) ->
bool
Como en nuestro ejemplo, elegir el contenedor incorrecto tiene sus consecuencias. Si colocamos azucar en un recipiente de 10 litros, entraría, pero sería demasiado para la función real que va a cumplir. Si lo colocamos en un recipiente de medio kilo, se desbordaría. Tiene que ser un contenedor de un kilo para que no sobre espacio, pero tampoco desborde.
Supongamos que queremos guardar un número entero. Al igual que nuestro ejemplo, comenzamos colocando el contenedor que vamos a utilizar:
int
Y seguido, colocamos el identificador:
int numero
Lo que contúa son dos posibles acciones. Si se tratase de nuestro frasco, podríamos cerrar su tapa o colocar el azucar. Con una variable sucede lo mismo. Podemos cerrar la variable para indicar que finalizamos la acción de “elegir el tipo de dato” y “ponerle un nombre” para guardarla en nuestro alacena y utilizarla luego.
int numero;
El punto y coma le indica al compilador que finalizamos una acción.
O podemos darle un valor (llenar el frasco con el contenido)
int numero = 10;
Como se nota en ambos ejemplos, las acciones siempre las finalizamos colocando punto y coma.
Si en lugar de querer guardar un valor entero quisiéramos guardar un texto, utilizaríamos el tipo de datos string:
string texto = "Esto es un texto";
O si quisiéramso guardar un valor de verdad:
bool valorDeVerdad = true;
Listo! Construimos una variable.
Una variable por lo tanto es la suma de un tipo de dato, un identificador y un valor.
Ahora con toda seguridad, al haber guardado nuestro valor en un contenedor de su medida y al haberle puesto un nombre, cada vez que queremos utilizarlo vamos a poder llamarlo.
numero;
En este ejemplo estamos llamando al valor. El compilador lee la línea de código y dice “Ok, necesitan el frasco con el nombre numero”, va a hasta la alacena (Memoría RAM), lo agarra y nos lo entrega.
¿Y si queremos colocar algo distinto dentro de ese contenedor? Para eso antes tenemos que entender qué es la asignación.
Asignación
La acción de colocar un valor en una variable se llama asignación y para ralizarlo debemos utilizar el operador de asignación:
=
El símbolo de igual (a diferencia que en matemáticas) lo utilizamos para poder colocar un valor por primera vez en una variable o para cambiarlo por un nuevo valor. Esto ya lo vimos hace un rato cuando mencionamos lo de colocar el azucar en el frasco.
int numero = 10;
Cuando colocamos el operador de asignación luego de una variable, le estamos indicando al compilador que el valor que continúa es el que queremos guardar en nuestro contenedor.
int numero;
numero = 10;
En este ejemplo, elegimo el contenedor, le poenemos nombre y lo cerramos. Es decir, determinamos el Tipo de Dato, lo ponemos un Identificador y ponemos el punto y coma para indicar que finalizamos la acción. El compilador con esa simple instrucción puede reservar un espacio en la memoria RAM o, siguiendo el ejemplop, hacer espacio en la alacena en el que colocaremos el frasco.
Pero no solamente podemos asignar valores literales como 10 o "Estos es un texto", sino que podemos asignar el valor de otro contenedor y en uno nuevo.
int numero = 10;
int numero_2 = numero;
En este ejemplo, el compilador crea la variable llamada numero y le asigna el valor de 10. Luego crea una segunda variable llamada numero_2 y le coloca el valor de la variable numero, es decir, el 10. Para esto el compilador toma un frasco, le pone su etiqueta, un contenido y lo guarda en la alacena. Luego toma otro frasco, pero esta vez solo le pone una etiqueta, y antes de cerrarlo, se dirige a la alacena para agarrar el frasco anterior y colocar su contenido en el nuevo. Y acá se produce algo “mágico”, porque en realidad, en código, el contenido del primer frasco no pasa al segundo frasco, dejándolo vació, sino que lo copia, permitiendo que ambos frasco tengan el mismo contenido. ¿No sería bueno que pase de verdad? Sería como tener mi frasco con 1 kilo de azucar y al pasarlo a otro frasco no estaríamos pasando el mismo contenido, sino que lo estamos copiando, para ahora tener dos frasco completos con 1 kilo de azucar cada uno. Eso mismo sucede en código. Ambas variables ahora tienen el mismo valor.
Pero ¿entonces qué pasa con la siguiente línea?:
int numero = 10;
numero = 20;
¿Daría error? Si seguimos con la lógica del frasco, sí. por que estaríamos agregando más valor a un espacio que ya tiene un valor. Pero en código se produce algo distinto. El operador de asignación asigna valores a una variable eliminando el anterior. Se podría decir que el valor que contenía el contenedor se saca y se coloca el nuevo, pero en realidad sucede algo más violento. El valor anterior se elimina, se pisa, se evapora como Peter Parker tras el chasquido de Thanos, para poder colocar el nuevo valor. Esto tiene dos implicancías:
- Es más simple la asignación. En el ejemplo anterior en el que guardamos un 10 y luego realizamos una segunda asignación con el valor de 20, lo que sucede es que esa variable inicialmente tiene
10, pero luego, cuando le asignamos el20, pasa a tener20. El10se eliminó. - Pero, por otro lado, perdemos el valor anterior. No podemos recuperarlo luego de asignar otro valor en el mismo espacio:
int a = 10;
int b = 20;
a = b;
b = a;
En este ejemplo, si lo leemos rápido podemos pensar que estamos intercambiando valores de una variable a otra. ¿Cierto? ¡Pero no! Lo que está sucediendo es que efectivamente cremos dos variables lalamdas a y b, les asignamos 10 y 20 respectivamente, pero a continuación, el valor de a se pierde porque le asignamos el de b y luego, esto es más frustrante, estamos asignando el nuevo valor de a (que es 20) en la variable b (que también es 20). Al final, si leemos los valores, quedaría a -> 20 y b -> 20.
Inevitablemente, si lo que queremos es pasar el valor de la variable a a la variable b vamos a tener que tener un segundo contenedor.
int a = 10;
int b = 20;
int aux;
aux = a;
a = b;
b = aux;
¿Qué es todo esto? A esto en programación se le llama swap. Como la asignació directa, como dijimos, elimina el valor, al crear un avariable ‘auxiliar’ estamos primero, antes de realizar la primera asignación, asegurando la integridad del valor de la variable a. Luego, ahora sí, podemos asignar el valor de la varible b en la variable a. Logicamente, el valor de la variable a como mencionamos, se elimina, pero no importa, porque guardamos una copía en la variable aux. Finalmente, podemos asignar el valor de la variable aux que es en realidad la variable a en la variable b. ¿Te perdiste? Yo sí. Veamoslo paso por paso para no cerrar el capítulo con un mal sabor de boca:
int a = 10;
int b = 20;
int aux;
aux = a; // La variable 'aux' tien el valor de 10
a = b; // la variable 'a' que tenía el valor de 10, ahora tiene el valor la variable 'b' de 20.
b = aux; // la varaible 'b' que tiene el valor de 20, le asignamos el valor de 'aux' que es 10 (el valor de 'a')
Si pudiésemos ver los valores de a y de b veríamos que se invirtieron. Empezaron siguiendo:
a -> 10
b -> 20
y concluyeron siendo:
a -> 20
b -> 10
¿Complicado? Por supuesto que sí. Estamos comenzando a pensar de una manera diferente, donde las reglas parecen similares a la realidad, pero también se comportan distinta.
Repasa el capítulo. Realizá los ejemplos. Si tenés dudas, siempre podés mandarme un mail (no tengo inconvenientes con eso) y lo vemos juntos.