[C] débutant a=b différent de b=a ?

débutant a=b différent de b=a ? [C] - C - Programmation

Marsh Posté le 14-04-2012 à 06:51:25    

Bonjour,
 
Je viens de réaliser un code assez simple qui me permet de dupliquer un tableau. J'ai longtemps cherché où était mon erreur et je me suis rendu compte que l'ordre avait une importance dans une équation d'égalité :

Code :
  1. void copie(int tableau[], int tableau2[], int taille)
  2. {
  3.     int i=0;
  4.     for ( i = 0 ; i < taille ; i++)
  5.     {
  6.         tableau2[i]=tableau[i];   // C'est ici que survenait mon problème
  7.     }
  8. }


 
Donc ma question est pour quoi :

Code :
  1. tableau[i]=tableau2[i];


me sort un résultat différent que

Code :
  1. tableau2[i]=tableau[i];

Reply

Marsh Posté le 14-04-2012 à 06:51:25   

Reply

Marsh Posté le 14-04-2012 à 09:10:37    

Parce que le signe = en informatique n'a pas du tout le sens du signe = en mathématique.
C'est une assignation: "j'assigne la valeur à droite du = à la valeur à gauche du signe =". Cette opération n'est en aucun cas commutative.
C'est même pour ça que la notation dans certains livres et langages, cette assignation est notée <-- (flèche vers la gauche) et non =.

 

Il ne faut jamais oublier que derrière un algo en informatique, il y a des cases mémoires, et quand tu copies un tableau A vers un tableau B, tu copies réellement le contenu des cases mémoires de A dans les cases mémoires de B. Il faut donc être sûr que:
1. A et B aient été correctement alloués/réservés
2. B ait une taille au moins égale à A
3. A et B ne se chevauchent pas sous peine de mauvaises surprises. Normalement ce point est garanti par 1, mais lors de l'utilisation des pointeurs, on peut facilement se planter.
On voit bien dès lors que cette opération n'a rien à voir avec un = mathématique.


Message édité par el muchacho le 14-04-2012 à 09:49:59

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 14-04-2012 à 13:11:03    

Pour faire simple :
"="  > opérateur d'assignation (a = b : "j'assigne le contenu de b dans a" )
"==" > opérateur de test d'égalité

Reply

Marsh Posté le 14-04-2012 à 19:51:20    

Merci ça aide!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed