initialisation

L’initialisation d'une variable, c'est donner une valeur à la variable lors de sa déclaration, définition.

Dans la plus part des langages, C y compris, le programmeur peut donner une valeur d'initialisation. Et, il y a un mécanisme d'initialisation par défaut et de valeurs par défaut.

Le langage C a le gros inconvénient de traiter cet aspect de façon compliquée.

Le cas des variables globales. Initialisation par défaut à la valeur 0

L'initialisation des variables déclarées au niveau fichier source (variables externes inter-fichiers ou variables confidentielles) et les variables rémanentes (déclarées avec le mot clé static dans une fonction ou un bloc) se fait l'aide d'une valeur qui doit être connue à la compilation. L'expression ne doit comprendre que des constantes, variables dont la valeur est connue à la compilation.

Ces variables sont initialisées par défaut à la valeur 0 pour les entiers, la valeur 0.0 pour les réels, ... (c'est à dire avec tous les bits mémoire à 0) .

Le cas des variables externes inter-fichiers. Initialisation explicite nécessaire

Pour les variables externes inter-fichiers, il faudra une initialisation explicite dans un des fichiers pour distinguer la définition de la variable dans un fichier (celle comprenant l'initialisation) des déclarations de cette variables dans les autres fichiers sources (déclarations sans initialisations).L'information est utile pour la réservation de la mémoire

Les variables locales (à une fonction). Pas d'initialisation par défaut. Elle n'est pas cependant pas obligatoire

Les variables de classe d'allocation automatique ou registre peuvent être initialisées explicitement avec une valeur qui peut n'être connue qu'à l'exécution. On peut par exemple initialiser une variable locale à une fonction à l'aide d'une expression faisant intervenir les paramètres de la fonction.

Une variable de classe automatique ou registre non initialisée explicitement a une valeur indéfinie.

Comment initialiser?

Une variable de type simple : int, float, char

int i = 3 ;

float pi = 3.14

char finDeChaine = ’\0’;

Une variable de type pointeur

int *pi = &i ;

Un tableau à une dimension

int tabint [5] = {0, 1, 2, 3, 4} ;/* Un tableau de 5 entiers. Le premier vaut 0, le deuxième vaut 1, .... */

Vous pouvez donner moins de 5 valeurs (les autres seront alors initialisés à 0)

On peut laisser le compilateur compter le nombre de valeurs pour fixer la taille du tableau :

int tabentier [ ] = {1, 2, 3, 4, 5, 6 } ; /* taille égale à 6 */

Initialisation d'un tableau de caractères. Notez le caractère de fin de chaîne /0. Il n'est pas obligatoire, amis


char tabchar [8] = {‘b’, ‘o’, ‘n’, ‘j’, ‘o’, ‘u’ , ‘r’, ‘/0’} ;

Autre notation pour un tableau de caractères, à savoir une chaîne

char tabchar [8] = « bonjour » ; /* Le caractère de fin de chaîne /0 est placé */

char tabchar [ ] = « bonjour » ; /* Mieux, le compilateur ajuste la taille du tableau, caractère de fin de chaîne /0*/

Un tableau à plusieurs dimensions

int tabint[2][10] = {

 

{1,2,3,4,5,6,7,8,9,10} /*tabint [0] */ ,

{3,4,7,6,9,9,7,0,4,8} /*tabint [1] */

 

} ;

Une liste incomplète est automatiquement complétée de 0.

On peut aussi faire l’initialsation de la façon suivante :

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

Atention, ne pas confondre :

int tab [2] [2] = { {1} , {1} } ; /* { {1, 0} , {1, 0} } */

et

int tab [2] [2] = {1,1} ; /* { {1, 1} , {0, 0} } */

Une structure

struct famille {

char nom [10] ;

char prenompere [10] ;

char prenompere [10] ;

int nbrenfants ;

} fam1 = {"Ogor", "Robert", "Marie-Francoise", 4} ; /* initialisation par un agrégat */

struct famille fam2 = fam1 ; /* initialisation par copie d'un autre objet */

struct famille fam3 = {"Rannou", "Robert", "Marie-Francoise", 4} ; /* initialisation par un agrégat */

» Glossaire du langage C