Tutorial de programación en C para Linux Parte 17: Inicialización de variables
La inicialización de variables es algo que hemos estado haciendo a lo largo de estaserie de tutoriales de programación en C hasta ahora, pero en realidad nunca lo hemos discutido explícitamente. Pues bien, eso cambia ahora, ya que aquí hablaremos de la inicialización de variables con un poco de detalle.
¿Qué es exactamente la inicialización? Bueno, como su nombre indica, cuando se asigna un valor a una variable por primera vez, eso se conoce como inicialización de la variable. Por ejemplo:
int a = 1;
Ahora bien, esto también se conoce como inicialización explícita. La razón es que, incluso si no asignas un valor a una variable como ‘a’, e intentas imprimir el valor de la variable, verás algún valor aleatorio.
Por ejemplo, considera el siguiente código:
#include <stdio.h>
int main()
{
int a;
printf("a = %d", a);
return 0;
}
Cuando ejecuté este código, obtuve ‘a’ como ‘0’. Pero esto no siempre será cierto porque las variables automáticas como ‘a’ se inicializan con valores aleatorios en ausencia de una inicialización explícita. Por eso siempre se sugiere inicializarlas explícitamente con un valor, por ejemplo «0», para evitar que se utilice por error un valor basura.
Ten en cuenta que sólo las variables automáticas obtienen un valor basura si se dejan sin inicializar. Las variables estáticas y globales obtienen «0» como valor inicial aunque no les asignes explícitamente un valor. Aquí tienes un ejemplo:
int x;
void func();
{
static int b;
//statements
b++;
}
int main()
{
int a;
//statements
func();
return 0;
}
En el código anterior, está garantizado que las variables «x» y «b» se inicializarán a «0», pero no se garantiza qué valor tendrá la variable «a».
Además, sólo puedes inicializar las variables estáticas y globales con valores constantes. En otras palabras, no es posible asignar valores a las variables estáticas y globales en función de otras variables.
He aquí un ejemplo:
#include <stdio.h>
int k;
int x = k;
void func()
{
int z = 2;
static int b = z;
b++;
}
int main()
{
int a;
printf("a = %d", a);
func();
return 0;
}
Cuando compilé este código, obtuve los siguientes errores:
main.c:12:9: error: initializer element is not constant int x = k; ^ main.c: In function ‘func’: main.c:18:20: error: initializer element is not constant static int b = z; ^
Como «x» es global y «b» es estática, puedes ver que el compilador dice claramente que los elementos inicializadores no son constantes. Así que esto reafirma el hecho de que sólo se pueden utilizar constantes para inicializar variables globales y estáticas.
Siguiendo con el tema, las matrices también se pueden inicializar de diferentes maneras. Por ejemplo, una forma es inicializar es:
int arr[] = {1,2,3,4,5};
De esta forma, el tamaño del array se calcula contando el número de elementos inicializadores. Así, en este ejemplo, el array ‘arr’ tiene un tamaño de 5, con los valores 1-5 como elementos (en ese orden).
A continuación, digamos que el tamaño del array está predefinido, y que inicializas el array utilizando el método anterior. Aquí tienes un ejemplo:
int arr[5] = {1,2,3,4};
Entonces, en este caso, los cuatro primeros elementos se recogerán de la lista proporcionada dentro de {}, y el elemento final será «0». Así que sí, puedes proporcionar menos elementos que el tamaño de la matriz de esta manera, y dejar que el compilador se encargue del resto inicializándolos con ‘0’.
Por ejemplo, el siguiente programa
#include <stdio.h>
int main()
{
int arr[10] = {1,2,3,4,5};
int i = 0;
for(i=0;i<10;i++)
printf("%d ", arr[i]);
return 0;
}
produce la siguiente salida:
1 2 3 4 5 0 0 0 0 0
Conclusión
En este tutorial hemos hablado un poco de la inicialización de variables. Te animo a que pruebes los ejemplos y los conceptos tratados aquí. En caso de que tengas alguna duda o consulta, puedes dejar un comentario a continuación.