Sobes.tech
Junior

Qu'est-ce qu'un transfert par référence ?

sobes.tech IA

Réponse de l'IA

La transmission par référence (pass by reference) est un mécanisme par lequel une fonction reçoit l'adresse (référence) d'une zone mémoire où sont stockées les données de l'argument. En conséquence, toute modification apportée à la variable à l'intérieur de la fonction se reflète sur la variable d'origine en dehors.

Caractéristiques principales :

  • L'adresse mémoire est transmise, pas une copie de la valeur.
  • La fonction travaille directement avec les données originales.
  • Les modifications dans la fonction persistent après sa fin.
  • Applicable aux objets, tableaux et autres types de données référencés dans de nombreux langages de programmation.
  • Dans certains langages (par exemple, C++), il est possible de passer explicitement des types primitifs par référence en utilisant des pointeurs ou des références.

Exemple de code en Python :

# Passage d'une liste (type référencé)
def modify_list(my_list):
    my_list.append(4) # Modification de la liste originale

data = [1, 2, 3]
modify_list(data)
print(data) # Affichera [1, 2, 3, 4]

# Passage d'un nombre (type primitif - passage par valeur en Python)
def modify_number(my_number):
    my_number += 1 # Une copie locale est créée et modifiée

value = 5
modify_number(value)
print(value) # Affichera 5 - la valeur originale n'a pas changé

Exemple de code en C++ :

#include <iostream>

// Passage par référence
void modify_value_ref(int &val) {
    val += 10; // Modification de la variable originale
}

// Passage par valeur (pour comparaison)
void modify_value_copy(int val) {
    val += 10; // Modification de la copie locale
}

int main() {
    int a = 5;
    modify_value_ref(a);
    std::cout << "Après référence : " << a << std::endl; // Affichera Après référence : 15

    int b = 5;
    modify_value_copy(b);
    std::cout << "Après copie : " << b << std::endl; // Affichera Après copie : 5

    return 0;
}

Avantages :

  • Efficace lors du traitement de grands volumes de données, car aucune copie n'est nécessaire.
  • Permet aux fonctions de modifier plusieurs valeurs via les arguments.

Inconvénients :

  • Peut rendre le code moins prévisible si la fonction modifie les arguments sans le préciser dans le nom ou la documentation.
  • Nécessite de la prudence pour éviter des effets secondaires indésirables.