Je vois cet avertissement Comment y remédier?
Temp += (Table[i, temp3] - (MSB[i] ^ 0x1));
warning: l’opérande gauche de l’expression virgule n’a aucun effet
qu’est-ce que l’object table? Si c’est un tableau à 2 dimensions, alors vous devriez écrire
Table[i][temp3]
Dans votre code
[i, temp3]
est un opérateur de virgule – il évalue le premier paramètre (i), l’ignore et renvoie temp3. Vous pouvez donc simplement supprimer i si Table est une sorte de conteneur qui accepte un index unique pour accéder à ses objects.
Mauvaise syntaxe – si Table
est un Table
deux dimensions, utilisez Table[i][temp3]
.
L’opérateur de virgule évalue un nombre quelconque d’expressions de gauche à droite et donne la valeur de l’expression la plus à droite.
Vous avez une virgule dans le Table[i, temp3]
, ce qui revient exactement à faire le Table[temp3]
. Avez-vous essayé de faire le Table[i][temp3]
pour accéder à une position dans un tableau bidimensionnel?
edit : J’expliquerai un peu plus, cela peut vous être utile. Je ne serai pas précis à 100%, c’est juste pour vous donner une idée de ce qui se passe.
Pourquoi devez-vous utiliser deux paires de crochets pour accéder à une “cellule” dans votre “tableau”? Avec les tableaux unidimensionnels, array[i]
déposera sur le i-ème élément du tableau, n’est-ce pas? Eh bien, avec un tableau à deux dimensions, appelons-le tableau comme vous l’avez fait, table[i]
dirigera également sur le i-ème élément. Cette fois, cependant, cet élément est un autre tableau: la i-ème ligne entière de la table.
Donc, si la table[i]
est une ligne de la table, qui est juste un autre tableau, comment accéder à la colonne j? Eh bien, vous devez aller à la row[j]
, qui est la table[i][j]
.
Les tableaux multidimensionnels en C sont des “tableaux de tableaux”.
Qu’entendez-vous par i, temp3
? Si Table
est un tableau 2D, accédez à l’élément (i, temp3) avec la Table[i][temp3]
.
Edit: Depuis que j’ai été assez lent pour être battu par plusieurs réponses, je vais append quelque chose pour que ma réponse ne soit pas simplement une copie des réponses précédentes: que signifie vraiment ” i, temp3
“? Eh bien, la norme C99 explique:
“L’opérande gauche d’un opérateur de virgule est évalué comme une expression vide; il y a un sharepoint séquence après son évaluation. Ensuite, l’opérande droit est évalué; le résultat a son type et sa valeur.97) Si l’on tente de modifier le résultat d’opérateur par virgule ou d’y accéder après le sharepoint séquence suivant, le comportement est indéfini. ”
Donc, Table[i, temp3]
signifie “évaluez i, puis accédez au numéro d’élément temp3 dans Table
. Ainsi, le compilateur vous avertit que le i ne fait rien (car évaluer i ne produit aucun effet secondaire).