244 votes

Passage par référence en C

Si C ne supporte pas le passage d’une variable par référence, pourquoi cela fonctionne-t-il ?

Sortie

 $ gcc -std = c99 test.c $ a.exe j’ai = 21 

350voto

tvanfosson Points 268301

Parce que tu es de passage à la méthode et puis déréférencement pour obtenir le nombre entier qui est pointé à la valeur du pointeur.

56voto

Alexander Gessler Points 26717

Parce qu’il n’y a aucun passage par référence dans le code ci-dessus. À l’aide de pointeurs (comme `` ) est le col-de-adresse. Il s’agit de passage par référence en C++ (ne fonctionnera pas en C) :

32voto

Daniel Vassallo Points 142049

Ton exemple fonctionne parce que vous êtes de passage à l'adresse de la variable à une fonction qui manipule sa valeur avec l' opérateur de déréférencement.

Tandis que le C ne prend pas en charge les types de données de référence, vous pouvez toujours simuler le passage par référence explicitement en passant le pointeur de valeurs, comme dans votre exemple.

La référence C++ type de données est moins puissant, mais considéré comme plus sûr que le type de pointeur hérité de C. Ce serait votre exemple, adapté pour une utilisation en C++ références:

void f(int &j) {
  j++;
}

int main() {
  int i = 20;
  f(i);
  printf("i = %d\n", i);

  return 0;
}

13voto

antony.trupe Points 4358

Vous passez un pointeur(adresse lieu) par valeur.

C’est comme dire « voici le lieu avec les données que je veux vous mettre à jour. »

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X