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.

Contents 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.

Contents 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

Contents Haut

English translation

You have asked to visit this site in English. For now, only the interface is translated, but not all the content yet.

If you want to help me in translations, your contribution is welcome. All you need to do is register on the site, and send me a message asking me to add you to the group of translators, which will give you the opportunity to translate the pages you want. A link at the bottom of each translated page indicates that you are the translator, and has a link to your profile.

Thank you in advance.

Document created the 19/03/2002, last modified the 31/10/2018
Source of the printed document:https://www.gaudry.be/en/c-variables.html

The infobrol is a personal site whose content is my sole responsibility. The text is available under CreativeCommons license (BY-NC-SA). More info on the terms of use and the author.