Qu'est ce qu'une variable?
Pas d'inquiétude, j' explique. Pour schématiser ce qu'est une variable nous allons nous baser sur un petit programme traitant d'une variable. Recopiez le code ci-dessous :
Code c:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
long ageUtilisateur;
return 0;
}
Donc déjà on remarque encore une fonction "main" à l'intérieur de laquelle on peut voir deux instructions. Jusque là vous devez suivre ... Enfin j'espère sinon retournez lire la fin du chapitre précédent.
Etudions l'instruction :
Code c:
long ageUtilisateur;
Ici la variable est "ageUtilisateur", ageUtilisateur est son nom, son type est "long" nous détaillerons les types de variables après.
Cette instruction est ce que l'on appel une déclaration de variable.
Là ça se complique, mais pas de soucis j'explique.
Chose importante : les noms de variables sont souvent source d'erreur. Leur nom ne peut être composé que de caractères alphanumériques (a - A, b - B, ..., 8,9) et du caractère de soulignement " _ " la touche 8 de votre clavier. On ne doit en aucun cas utiliser des espaces et d'autres caractères du genre : " ? ", " ; ", ...
De plus le nom ne doit pas commencer par un chiffre. Enfin préférez utiliser des noms compréhensibles ( par exemple : vieMonstre vaut mieux que : vM )
Ainsi :
sont justes : vieMonstre, vie_du_monstre, vie_monstre1, VIE_MONSTRE
sont faux : 1vie, viedepart-5, vie0,005
sont problématiques : a, A2, B2, b2, e, b
On remarque aussi dans ce code que la valeur de cette variable n'est pas visible. En fait la valeur que la variable contient est quelquonque. (==> c.f annexe mémoire)
Comment afficher la valeur de cette variable ?
Avec un printf tout bête rajoutez cette ligne juste après la déclaration de la variable ageUtilisateur :
Code c:
printf("ageUtilisateur vaut %ld", ageUtilisateur);
Vous verrez sans doute un nombre qui ne peut pas représenter un age humain.
Dans cette case de mémoire il y avait déjà un nombre utilisé précédemment par un autre programme. Rappelez vous le paragraphe sur la mémoire.
On peut remarquer "%ld" dans ce code, en fait il désigne la variables ageUtilisateur que l'on rajoute après les guillets. En gros que se passe t'il ? Et bien lors de la compilation, le compilateur remplace "%ld" par la valeur contenue dans la variables ageUtilisateur.
Dans ce programme aucune valeur n'est spécifiée et on l'a vu cela amène à des nombres improbables. C'est pour cela qu'il faut initialiser les variables que l'on utilise, en les mettant à zero si on ne connait pas à l'avance leur valeur, et si on les connait on initialise les variables à ces valeur .
UNE VARIABLE NE PEUT CONTENIR QU'UNE SEUL VALEUR !!!!
Si on a plusieurs valeurs a déclaré, on initialise autant de variable qu'il y a de valeur.
Du code pour illustrer tout cela :
Code c:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
long ageUtilisateur = 0;
printf("ageUtilisateur vaut %ld", ageUtilisateur);
return 0;
}
Compiler le programme. Il affiche 0, tant mieux; il affiche erreur ou autre chose, vérififiez vos " ; " et si il le faut faites un copier coller du code ci-dessus.
Remplacer maintenant le zero par une autre valeur, entière ( pas de virgule ) et ne dépassant pas 2 milliards ( nous verrons pourquoi plus tard ). Si vous compilez vous devez voir apparaitre la valeur que vous avez entré ... Magique ...
Il existe un autre genre de variable : les constantes.
Comme leur nom l'indique, la valeur de ces variables ne peut pas changer au cour du déroulement du programme et si vous avez bien suivi, c'est là le contraire avec une variable " ordinaire" qui, elle, peut changer de valeur au cour du programme.
Pour définir une constante, on écrit :
Code c:
const long ageUtilisateur = 0;
Les types :
Nous avons vu qu'à chaque variable est associé un type. Toutes les données que vous utiliserez dans vos programmes vont suivre cette typologie. Nous verrons ici une partie (et la plus simple) des différents types existants.
Ce type décide de l'occupation en mémoire de cette donnée.
Ces types se divisent en deux groupes :
- les entiers
- les nombres a virgules flottantes
Les Entiers :
Les types stockant des nombres entiers sont :
- int : il stocke le nombre sur deux octets, il permet de stocker des nombres entiers allant de - 32 768 à 32 767. On l'utilisera en priorité pour des petits nombres entiers.
- long : l stocke un nombre sur quatre octets, il permet de stocker des nombres entiers allant de - 2 147 843 648 à 2 147 843 647. On l'utilisera en priorité, il permet surtout de gérer les erreurs de saisie d'un utilisateur (oui il y a toujours ceux qui tapent un nombre improbable pour tester le programme).
La plage de valeur d'un type dépend du nombre de combinaisons de nombres que l'on peut former sur le nombre d'octet qu'utilise le type. Par exemple pour le type int :
Il stock sur deux octets donc 16 bits :
16 x 16 + 16 x 16 = 256 x 256 = 65 536 combinaisons possibles qu'on sépare en deux un coté allant aux nombres négatifs et un autre aux positifs. Si vous n'avez absolument rien compris de ces deux paragraphes et du calcul ne vous inquiétez pas, il s'agit là non plus de C mais de binaire ( donc pas au programme :p ).
Les nombres à virgule :
- float : il stock les nombres sur quatre octets, il permet de gérer des nombres allant de 3,4 x 10 puissance -38 à 3,4 x 10 puissance 38. Le type float nous sera utile pour gérer les nombres à virgule.
- double : il stock les nombres sur huit octects, il permet de gérer des nombres allant de 1,7 x 10 puissance -308 à 1,7 x 10 puissance 308.
La plage des nombres des types de données à virgule flottante est beaucoup plus complexe que pour les types de nombres entiers. C'est pour cela qu'il ne vaut mieux pas en parler.