printf("mess: %d\n", -2[n]); //value: -3
-2[n]
равно -(n[2])
(см. здесь для объяснения этой причуды). На данный момент, n[2]
получает вас 3
, поэтому -n[2]
это -3
.
printf("mess: %d\n", (-2)[n]); //value: 1
Это [-2]
, что означает 2 слева от того места, где вы начали, что приводит к 1
.
printf("mess: %d\n", n[-6]); //value: 32766
Это относится к до начала вашего массива, и это неопределенное поведение. Он может делать что угодно , но, скорее всего, он просто печатает какое-то мусорное значение, интерпретируя память, к которой он не должен обращаться таким образом.
Я не уверен, насколько хорошо определены другие операторы кода. Это действительно плохая практика, пожалуйста, не пишите такой код. Как вы правильно сказали, это mess
.