3 votes

Expliquez pourquoi ces deux tableaux multidimensionnels semblent être une syntaxe valide alors qu'un seul donne les résultats escomptés.

Je viens de me rendre compte de mon erreur dans un bout de code qui remplit un tableau c à 2 dimensions.

J'ai déclaré le tableau comme suit :

int myArray[5][5];

mais a défini par erreur une valeur avec :

*myArray[3,4] = 10;

alors qu'il aurait dû l'être :

myArray[3][4] = 10;

Ok, la première ligne est une erreur mais il a compilé et s'est exécuté, bien qu'avec des résultats très étranges. (par exemple, quand j'ai essayé d'imprimer le contenu de *myArray[3,4], il y avait la mauvaise valeur)

Quelqu'un peut-il expliquer ce qu'est exactement la première déclaration d'affectation ? faire ?

edit : j'ai d'abord essayé d'utiliser :

myArray[3,4] = 10;

ce qui a provoqué une erreur du compilateur parce que j'essayais d'assigner un int à un type *int. Je suppose qu'il a évalué 3,4 à 4 comme indiqué dans la réponse ci-dessous et a compris que j'essayais d'ajouter 4 à un pointeur et que je devais donc utiliser l'adressage par pointeur pour accéder au tableau.

7voto

Ritardi Giuseppe Points 280

La virgule a valeur de deuxième expression : (a,b) est b : http://en.wikipedia.org/wiki/Comma_operator

*myArray[3,4] est comme *myArray[4]

0voto

Lundin Points 21616

*myArray[3,4] = 10 ;

Il s'agit d'une utilisation accidentelle d'une fonctionnalité obscure du langage C appelée "l'opérateur virgule", qui évalue l'expression de gauche à droite. Sans entrer dans les détails, il saute le 3 et prend le 4. C'est ce que voit le compilateur :

*myArray[4] = 10 ;

Vous auriez vraiment dû recevoir un avertissement du compilateur, si vous avez un compilateur décent.

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