解释输出中是否存在字符

use*_*975 1 c operator-precedence

以下程序:

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;
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出是:

HHE!

hhe是不错,但"!" 在输出中让我困惑.声明ch=++i[s]对此负责.它应该被解释为:

ch =*(s + ++ i);

由于前缀增加导致i变为4并且使用它来获取'c'但是'!',我没有得到它并且在此操作之后加上我打印了'i'的值来检查它是4而不是3有什么问题,我不明白吗?

joh*_*902 5

因为它是

ch=++(i[s]);
Run Code Online (Sandbox Code Playgroud)

哪里i[s]=' '.在ASCII代码中,'!' = ' ' + 1