2013-06-28 4 views
1

Следующая программа:Объяснение наличия символа на выходе

int main() 
{ 
    static char s[25]="The cocaine man"; 
    int i=0; 
    char ch; 
    ch=s[++i]; 
    printf("%c",ch); 
    ch=s[i++]; 
    printf("%c",ch); 
    ch=i++[s]; 
    printf("%c",ch); 
    ch=++i[s]; 
    printf("%c",ch); 
    return 0; 
} 

Выход программы:

HHE!

hhe все в порядке, но '!' на выходе меня смущает. За это отвечает заявление ch=++i[s]. Он должен быть intepreted как:

ч = * (х + ++ I);

вызывая я быть 4 из-за приращения приставки и использовать его для извлечения «с», но «!», Я не получаю, что и плюс после этой операции я напечатал значение «я» проверить, и это было 4 не 3. В чем проблема, я не понимаю?

ответ

5

Потому что

ch=++(i[s]); 

Где i[s]=' '. И в ASCII-коде, '!' = ' ' + 1

+0

, почему вывод printf ("% c", str [3]), то есть значение, в котором хранится '', является печать '!' in output – user1369975

+0

Поскольку '++' изменен 'i [s]' ('s [3]' или, может быть, 'str [3]' вы имели в виду). – johnchen902

0

Оператор [] имеет приоритет перед арифметическими операторами. Знание этого ++i[s] эквивалентно ++(i[s]), как сказал Джон.