解释输出中是否存在字符

时间:2013-06-28 06:52:26

标签: 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;
}

该计划的输出是:

  
    

HHE!

  

hhe没问题,但是'!'在输出中让我感到困惑。声明ch=++i[s]对此负责。它应该被解释为:

  
    

ch = *(s + ++ i);

  

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

2 个答案:

答案 0 :(得分:5)

因为它是

ch=++(i[s]);

i[s]=' '。在ASCII代码中,'!' = ' ' + 1

答案 1 :(得分:0)

operator []优先于算术运算符。知道这个++i[s]等同于约翰所说的++(i[s])