Linux C Programmeren Handleiding Deel 17: Variabele Initialisatie

Initialiseren van variabelen is iets dat we tot nu toe in deze lopende Cprogrammeer-tutorial serie gedaan hebben, maar we hebben het nooit echt expliciet besproken. Wel, dat verandert nu, want we zullen hier het initialiseren van variabelen wat gedetailleerder bespreken.

Wat is initialiseren nu precies? Wel, zoals de naam al zegt, wanneer voor de eerste keer een waarde aan een variabele wordt toegekend, heet dat variabele initialiseren. Bijvoorbeeld:

int a = 1;

Nu is dit ook bekend als expliciet initialiseren. De reden is dat, ook al wijs je geen waarde toe aan een variabele als ‘a’, en probeer je de waarde van de variabele af te drukken, je een of andere willekeurige waarde te zien krijgt.

Neem bijvoorbeeld de volgende code:

#include <stdio.h>

int main()
{
int a;
printf(“a = %d”, a);

return 0;
}

Toen ik deze code uitvoerde, kreeg ik ‘a’ als ‘0’. Maar dit zal niet altijd kloppen, want automatische variabelen als ‘a’ worden bij gebrek aan expliciete initialisatie op willekeurige waarden geïnitialiseerd. Daarom wordt altijd aangeraden ze expliciet met een waarde, zeg ‘0’, te initialiseren, om te voorkomen dat per ongeluk een vuilniswaarde gebruikt wordt.

Merk op dat alleen automatische variabelen vuilniswaarde krijgen als ze ongeïnitialiseerd blijven. Statische en globale variabelen krijgen ‘0’ als beginwaarde, ook als je niet expliciet een waarde toekent. Hier is een voorbeeld:

int x;

void func();
{
static int b;

//statements

b++;
}

int main()
{
int a;

//statements

func();
return 0;
}

In de code hierboven is het gegarandeerd dat de variabelen ‘x’ en ‘b’ op ‘0’ geïnitialiseerd worden, maar er is geen garantie voor welke waarde de variabele ‘a’ zal hebben.

Verdergaand kun je alleen statische en globale variabelen initialiseren met constante waarden. Met andere woorden, het is niet mogelijk om aan statische en globale variabelen waarden toe te kennen in termen van andere variabelen.

Hier is een voorbeeld:

#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;
}

Toen ik deze code compileerde, kreeg ik de volgende fouten:

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;
                    ^

Omdat ‘x’ globaal is en ‘b’ statisch, zie je dat de compiler duidelijk zegt dat de initializer elementen niet constant is. Dit bevestigt dus opnieuw dat alleen constanten gebruikt kunnen worden om globale en statische variabelen te initialiseren.

Verder gaan, arrays kunnen ook op verschillende manieren geïnitialiseerd worden. Een manier is bijvoorbeeld om is te initialiseren:

int arr[] = {1,2,3,4,5};

Op deze manier wordt de grootte van de array berekend door het aantal initialisatie-elementen te tellen. In dit voorbeeld heeft array ‘arr’ dus een grootte van 5, met de waarden 1-5 als zijn elementen (in die volgorde).

Stel nu dat de grootte van array voorgedefinieerd is, en je initialiseert de array met de methode hierboven. Hier zie je een voorbeeld:

int arr[5] = {1,2,3,4};

Dan worden in dit geval de eerste vier elementen opgehaald uit de lijst die binnen {} gegeven wordt, en het laatste element is ‘0’. Dus ja, je kunt op deze manier minder elementen dan de grootte van de array geven, en de compiler voor de rest laten zorgen door ze met ‘0’ te initialiseren.

Bijvoorbeeld, het volgende programma:

#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;
}

produceert de volgende uitvoer:

1 2 3 4 5 0 0 0 0 0

Conclusie

In deze zelfstudie hebben we het een en ander besproken over het initialiseren van variabelen. Ik moedig je aan om zowel de voorbeelden als de hier besproken concepten uit te proberen. Als je twijfels of vragen hebt, mag je hieronder een reactie achterlaten.