3 AnswersNew Answer
Same answer as Pąľľąvī , but I've explained a bit about what 0[arr] and 2[arr + e] means. arr literally means *(arr + 0) because in C, variables containing array values are actually pointers to the first element of that array. So in the same way, 0[arr] literally means *(0 + arr), which is the same as *(arr + 0), which in turn, is the same as arr. So you are passing arr, which is 'S', to the %d format specifier, which prints the ordinal value of 'S' In the same way as explained above 2[arr + 3] is the same as *(arr + 3 +2) = *(arr + 5) = arr So you are passing arr, which is 'e', to the %c format specifier. The %c specifier is used to print values of char type to the screen. So it simply prints 'e'.