需要解释program.in的输出

时间:2012-04-09 17:58:31

标签: c

在查看C中的一些概念性问题时,我在一本书中遇到了这个问题。 以下程序的输出是什么?

#include<stdio.h>
#include<string.h>
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\n",ch);
    return 0;
}

答案:

 hhe!

有谁能解释一下这个输出是怎么来的?

3 个答案:

答案 0 :(得分:3)

从第一次作业开始

ch=s[++i];

递增i(i = 1)并在ch的索引(i = 1)处指定s字符。

ch=s[i++];

ch的索引(i = 1)处指定s字符,然后递增i(i = 2)。

ch=i++[s];

ch的索引(i = 2)处指定s字符,然后递增i(i = 3)。密钥:s[i] == i[s]

ch= ++i[s];

s的索引(i = 3)处递增ASCII值并将其赋值给ch。密钥:[]的优先级高于前缀++

答案 1 :(得分:1)

理解这一点的关键是在C中,以下是等价的:

x[y]
*(x+y)

并且前缀++的{​​{3}}比[]还多。

lower precedence也会派上用场。

答案 2 :(得分:0)

  • 首先是i=0,现在是s[++i],i = 1而s[1]会给h。

  • 现在s[i++]s[1] h,{i}为2。

  • i++[s],我们必须知道i[s]==s[i]。现在,它将s[2]e,值为i = 3.

  • 现在,对于最重要的部分++i[s],我们可以将其视为++(i[s]),因为 [ ]运算符的优先级高于++。由于i[s]是char值,++运算符将处理其ASCII值为s[3],即(空格)为32 http://www.asciitable.com/的ASCII值。 32增加1并变为33,它是!的ASCII值。