Maison >développement back-end >C++ >Est-ce que 2[arr] = 5 compile et passe l'assertion en C et C ?
Accès aux tableaux par index[array] en C et C
Dans un test de connaissances parfois posé par les enquêteurs, le code suivant est présenté :
int arr[] = {1, 2, 3}; 2[arr] = 5; // does this line compile? assert(arr[2] == 5); // does this assertion fail?
Il peut sembler au départ que l'expression 2[arr] ne devrait pas réussir à se compiler, car elle semble tenter d'indexer un tableau en utilisant un entier comme nom du tableau. Cependant, cette syntaxe inattendue est effectivement valable à la fois en C et en C.
Pour comprendre pourquoi, examinons les détails techniques de l'opérateur [] dans ces langages.
C et C Sémantique d'accès aux tableaux
Selon la norme C99 (6.5.2.1 paragraphe 1), l'opérateur [] attend des arguments dans la forme :
De plus, le paragraphe 2 de la même section explique que E1[E2] est équivalent à (*((E1) (E2))). Cela indique que l'expression E1[E2] peut être interprétée comme une manipulation de pointeur :
Essentiellement, il n'y a aucune exigence dans la norme selon laquelle l'ordre des arguments pour [] soit sain d'esprit. Par conséquent, l'expression 2[arr] est traitée comme équivalente à (*((2) (arr))).
Par conséquent, l'affectation et l'assertion ultérieure réussissent, comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!