Types de données en C

Les variables

Une variable est une partie de la mémoire de l'ordinateur que le programmeur alloue à son programme.
Elle peut ne contenir qu'une seule valeur (on parle alors de variable scalaire), ou plusieurs (tableaux, structures,...) sur laquelle (ou lesquelles) nous pouvons effectuer un calcul arithmétique.


C'est par la déclaration de la variable que nous allons lui attribuer un identificateur (son nom), et déterminer son type (le genre d'élément qui y sera rangé).
La spécification du type de la variable permet la réservation de la quantité de mémoire nécessaire, et répond à un ensemble de mots clés.

Table des matières Haut

Déclaration de variable en C

Syntaxe: [classe] type identificateur [initialiseur];

Les éléments entre crochets sont facultatifs.

  • Classe : voir page classe.
  • Type : précédés du signe %, les types les plus souvent rencontrés sont int, char, et float
  • Identificateur: c'est le nom que nous allons attribuer à la variable. La définition de plusieurs variables de même type en une seule instruction est possible en séparant les identificateurs par des virgules.
    L'identificateur peut être composé de lettres (attention, le langage C fait la différence entre majuscules et minuscules), de chiffres, et du caractère _ (souligné), mais le premier caractère ne peut être un chiffre. Le caractère d'espacement (blanc) est interdit, ainsi que les caractères accentués.
    Pour un pointeur, le nom est précédé du signe * (étoile).
  • Initialiseur : le signe = suivi d'une valeur, affecte cette valeur à la variable placée à gauche du signe.

Selon la durée de vie souhaitée pour une variable, on peut la déclarer à deux endroits différents. On parle alors de variable locale, ou de variable globale.

Table des matières Haut

Déclaration variables locales

Pré requis: bloc d'instructions.
Le bloc d'instructions, rappelons le, est un ensemble de déclarations et d'instructions délimités par des accolades.

Une déclaration locale de variable est une déclaration effectuée à l'intérieur d'un bloc, et la durée de vie de la variable n'excède pas les limites du bloc.
Lorsque le programme atteint le début du bloc ({), la mémoire nécessaire aux variables locales est réservée en haut de la pile (dont la taille augmente donc), espace mémoire retiré de la pile à la sortie du bloc.
Le seul cas où la mémoire reste allouée pour cette variable (donc où la valeur que contient la variable est conservée) est le cas où on quitte un bloc pour aller dans une fonction appelée (mais dans ce cas le terme "quitter" le bloc est sujet à discussions).

La déclaration locale d'une variable évite donc le gaspillage de la mémoire, mais nous devons alors trouver une solution pour retourner la valeur de cette variable si elle doit être utilisée hors du bloc.

Exemple d'utilisation de variable locale:

  1. #include <stdio.h>
  2. int fonct2 (int var2);

Prototype de la fonction fonct2

  1. void main (void)
  2. {
  3. int var1=97;
  4. printf("%c\n%c\n", fonct2 (var1), var1);
  5. }

Entrée dans le bloc, déclaration et initialisation de var1 (pour info: à quoi correspond cette valeur dans le code ASCII ?).

Ensuite, nous faisons appel à la fonction fonct2

  1. int fonct2 (int var2)
  2. {
  3. int var3;
  4. var3=var2-32;
  5. var2=0;
  6. return(var3);
  7. }

Réservation d'un emplacement mémoire pour var2 (à laquelle on transmet la valeur de var1)en haut de la pile.

Entrée dans le bloc, et allocation d'un emplacement mémoire pour var3, à laquelle on affecte la valeur var2-32 (=65. Toujours pour info: que représente la valeur 65 dans le code ASCII ?).

Réinitialisation de var2 et retour de la valeur 65 vers la fonction main (libération de la mémoire allouée à var2 et à var3).

L'exécution du programme provoque donc la sortie à l'écran de la lettre A suivie d'un saut de ligne, et de la lettre a (fainéants, vous auriez pu chercher un peu...).

Tableau des principaux types de variables

TypeSignificationArgument
TypeSignificationArgument
cUn seul caractère<char*arg
dEntier décimal<int*arg
DEntier décimal<long*arg
eVirgule flottante<float*arg
EVirgule flottante<double*arg
fVirgule flottante<float*arg
gVirgule flottante<float*arg
GEntier, octal, hexadécimaldouble*arg
iEntier, octal, hexadécimalint*arg
IEntier, octal, hexadécimalint*arg
oEntier, octal, sans signeint*arg
OEntier, octal, sans signelong*arg
pHexadécimal<void far*arg / void near*arg
sChaîne avec NULLchar tableau[]
uEntier décimal non signéunsign.int*arg
UEntier décimal non signéunsign.long*arg
xEntier hexadécimal non signéint*arg
XEntier hexadécimal non signélong*arg

Document créé le 19/03/2002, dernière modification le 07/04/2023
Source du document imprimé : https://www.gaudry.be/c-variables.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.