Référence (programmation)

Page d’aide sur l’homonymie

Pour les articles homonymes, voir Référence.

Cet article est une ébauche concernant l’informatique.

Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants.

Consultez la liste des tâches à accomplir en page de discussion.

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

L'article doit être débarrassé d'une partie de son jargon ().

Sa qualité peut être largement améliorée en utilisant un vocabulaire plus directement compréhensible. Discutez des points à améliorer en page de discussion.

En programmation, une référence est une valeur qui est un moyen d'accéder en lecture et/ou écriture à une donnée située soit en mémoire principale soit ailleurs. Une référence n'est pas la donnée elle-même mais seulement une information sur sa localisation. Beaucoup de langages de programmation permettent l'utilisation de références, que ce soit de façon explicite ou implicite.

Utilisation

Dans un langage typé

Quand le langage de programmation dispose d'un système de typage, le type des références est construit à partir du type des objets référencés. Par exemple si le type d'un objet est A, le type de la référence à l'objet sera REF A, mais cela peut dépendre du langage.

Dans un langage non typé

Le type de référence le moins élaboré, mais aussi le moins encadré, est le pointeur. Il s'agit simplement d'une adresse mémoire qui ne donne aucune indication sur ce qu'il référence.

Aliasing

Les références sont souvent vues comme des noms identifiant des données. Plusieurs noms peuvent référencer la même donnée (aliasing), ce qui peut provoquer des effets de bord indésirés. L'effet le plus classique consiste à libérer l'objet par l'une de ses références sans invalider les autres références, ce qui entraîne une erreur de segmentation, lors de l'utilisation des autres références non libérées et non invalidées.

Exemple

En C++, les références sont déclarées par le type de la variable suivi du suffixe &. Une référence est utilisée comme une variable classique, sauf que ses données sont contenues dans la variable qu'elle désigne. Elle est donc plus simple à utiliser que les pointeurs.

// reçoit une référence sur un entier(int) qui est incrémenté de 1
void incrementer_ref(int& ref) {
    ref++;
}

// reçoit un pointeur sur un entier(int) et incrémente sa valeur pointée de 1
void incrementer_ptr(int* ptr) {
    (*ptr)++;
}

int main() {
    // version avec une référence
    int a = 5;
    incrementer_ref(a); // a vaut 6

    // version avec un pointeur
    int b = 5;
    incrementer_ptr(&b); // b vaut 6
}

Libération et allocation

Les références peuvent être supprimées et l'objet non référencé devient inaccessible s'il n'y a pas d'autre accès à cet objet. Tout en étant inaccessible, la place que l'objet occupe peut toujours être réservée. Il faut donc un ramasse-miettes pour récupérer la place libérée par cet objet inaccessible et permettre de la ré-allouer. S'il n'y a pas de ramasse-miettes ou si celui-ci n'est pas exact (parce que le langage n'est pas typé), il peut y avoir une fuite de mémoire.

Notes et références

v · m
Types de données
Non interprétée
  • Bit
  • Byte
  • Trit
  • Tryte
  • Mot
Numérique
  • Bignum
  • Complexe (en)
  • Décimal (en)
  • Virgule fixe
  • Virgule flottante
  • Entier
    • Non signé (en)
  • Intervalle
  • Rationnel (en)
Texte brut
Pointeur
Composite (en)
Autres
Articles liés
v · m
Bibliothèque logicielle
Vocabulaire
Fonctions
Objet
Événementiel Inversion de contrôle
Code source
Structures de données
Déclarations
Structures de contrôle
Fonctions usuelles
Outil de développement
Folklore
Catégories :
  • Programmation informatique
  • Développement logiciel
v · m
Contexte
Semantic Web Stack
Applications et interfaces
Triplestore
Règles
Structure
Requête
Échange
Syntaxe
Identifiant
Caractères
Autres ontologies
Articles liés
  • icône décorative Portail de la programmation informatique