1

在查看 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!

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

4

3 回答 3

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];

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

于 2012-04-09T18:10:17.267 回答
1

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

x[y]
*(x+y)

而且该前缀++优先级低于[].

ASCII 字符集表也将派上用场。

于 2012-04-09T18:00:20.047 回答
0
  • 首先i=0,现在对于s[++i], i=1 并且s[1]将给出 h。

  • 现在对于s[i++],它将给出s[1]ish并且 i 的值为 2。

  • 因为i++[s],我们必须知道i[s]==s[i]。现在它将给出i=3 的s[2]ise和值。

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

于 2017-08-06T07:10:52.270 回答